Ios5 将iOS应用程序移动到使用故事板,同时以编程方式保留某些视图
我正在尝试将我现有的项目转换为使用故事板,这样我就可以直观地展示我的视图。不过,我仍然需要以编程方式将一些视图加载到其他视图中 (顺便说一句……我以前是用Flash ActionScript编程的,对iOS编程很陌生,只学过Objective-C的初级课程,所以我有一些巨大的“漏洞”正在努力克服) 我的布局是这样的: 日历有一个子视图来创建其单元格-“gridView”。我最初以编程方式创建了这个视图,它又为日历单元格(显示日期的方块)添加了自己的子视图。我已经成功地将gridView添加到故事板,并且它确实显示了日历单元格(由gridView以编程方式添加)。我已经成功地在日历上显示了正确的日期,现在我已经用情节提要打破了日历,并且正在尝试决定是否需要返回到以编程方式创建gridView,或者是否确实可以在情节提要中执行我想要执行的操作 这就是我被困的地方: 在gridView中,我使用draw rect创建所有单元子视图:Ios5 将iOS应用程序移动到使用故事板,同时以编程方式保留某些视图,ios5,uiview,xcode-storyboard,Ios5,Uiview,Xcode Storyboard,我正在尝试将我现有的项目转换为使用故事板,这样我就可以直观地展示我的视图。不过,我仍然需要以编程方式将一些视图加载到其他视图中 (顺便说一句……我以前是用Flash ActionScript编程的,对iOS编程很陌生,只学过Objective-C的初级课程,所以我有一些巨大的“漏洞”正在努力克服) 我的布局是这样的: 日历有一个子视图来创建其单元格-“gridView”。我最初以编程方式创建了这个视图,它又为日历单元格(显示日期的方块)添加了自己的子视图。我已经成功地将gridView添加到故事
// lay down the individual cells to build the calendar
// 7 days across x 6 weeks down
const CGSize gCellSize = {self.frame.size.width/7, (self.frame.size.height-20)/6};
for(int w=0;w<6;w++) //6 weeks in the calendar
{
for(int d=0;d<7;d++) //7 days in a week
{
// ------------------ setting up the CELLVIEW ----------------------//
CGRect calendarCellRect=CGRectMake(d*gCellSize.width,w*gCellSize.height+20, gCellSize.width, gCellSize.height);
CalendarCellView *cellView=[[CalendarCellView alloc] initWithFrame:calendarCellRect];
[self addSubview:cellView];
}
}
//放置各个单元格以构建日历
//7天内x 6周内
const CGSize gCellSize={self.frame.size.width/7,(self.frame.size.height-20)/6};
对于(int w=0;w而言,布局阶段在渲染阶段之前完成。如果您在drawRect
中创建子视图,则您已经做错了。所有“最后一刻”布局都应在-layoutSubview:
中完成,以覆盖UIView
子类
当添加到表格视图单元格时,您应该将子视图添加到单元格。contentView
而不是直接添加到单元格。view
中。有关表格视图单元格的解剖结构,请参见段落表格视图单元格的详细信息
此外,您不应该依赖数组中子视图的顺序。相反,您应该标记子视图(cellView.tag=d
),因为从nib或故事板加载时,视图层次结构中不保证子视图的顺序。您可以通过调用cell.contentView.viewWithTag:tag
来获得子视图
为什么不在-(UITableViewCell*)tableView:(UITableView*)tableView cell for rowatinexpath:(nsindepath*)indepath
中设置日期,这是设置表视图单元格中UI元素值的最常见位置。我可能不应该使用“cell”作为一个视图名,因为它不在一个表中,所以我认为它是误导性的。我试图为保存日历上每个日期的“正方形”想出一个名称,我想出了“单元格”.啊,我明白了。但我强烈建议不要在drawRect中进行布局,并建议您使用标记来访问子视图,而不是依赖视图层次结构中的特定顺序。苹果已经多次强调了这一点。我不确定视图布局是否应该进入drawRect,因此感谢您指导我远离它。最好的位置在哪里o从视图中添加子视图?-布局子视图?实际上,我最终将创建日历“正方形”的位移动到了一个级别,并将[self addSubview:cellView]更改为[gridView addSubview:cellView],这似乎有帮助…暂时不必担心大量的注释:)是的,layoutSubviews绝对是您在UIView子类中执行随时间变化的部分布局的地方。在init中创建子视图是常见的模式,但在layoutSubviews中设置框架。
-(void)displayDates:(NSArray *)selectedMonthDates previousMonthVisibleDates:(NSArray *)previousMonthDates followingMonthVisibleDates:(NSArray *)followingMonthVisibleDates
{
int cellNum=0;
NSArray *displayDates[]={previousMonthDates,selectedMonthDates,followingMonthVisibleDates};
for (int i=0; i<3; i++)
{
for (NSDate *d in displayDates[i])
{
CalendarCellView *cell=[self.subviews objectAtIndex:cellNum];
[cell resetState]; //initialize all properties within the CellView
cell.date=d; // set the cell's date property to be equal to the respective date collected from the displayDate array
cellNum++;
}
}
[self setNeedsDisplay];
}