我想在UIPicker中创建一个相当复杂的行。我见过的所有例子都是从头开始创建一个视图......
- (UIView *) pickerView:(UIPickerView *)pickerView
viewForRow:(NSInteger)row
forComponent: (NSInteger)component reusingView:(UIView *)view
{
CGRect cellFrame = CGRectMake(0.0, 0.0, 110.0, 32.0);
UIView *newView = [[[UIView alloc] initWithFrame:cellFrame] autorelease];
newView.backgroundColor = [UIColor colorWithRed:1.0 green:0.0 blue:1.0 alpha:1.0];
return newView;
}
这基本上有效,它在我的Picker中显示了一个紫色的矩形。
但我希望能够从NIB文件中加载pickerView项目,如此......
- (UIView *) pickerView:(UIPickerView *)pickerView
viewForRow:(NSInteger)row
forComponent: (NSInteger)component reusingView:(UIView *)oldView
{
NSArray * nibs = [[NSBundle mainBundle] loadNibNamed:@"ExpenseItem" owner:self options:nil];
UIView *newView = [nibs objectAtIndex:0];
return newView;
}
这会产生一个空白的白色屏幕,甚至不再显示选择器。我可以通过第一种方式完成它并在代码中构建我的子视图,但显然这里有一些我不明白的东西。有人知道吗?
答案 0 :(得分:2)
将细胞放入自己的笔尖
@interface
IBOutlet UITableViewCell *cellFactory;
@implementation
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"LapCellID"];
if(nil == cell) {
[[NSBundle mainBundle] loadNibNamed:@"LapCell" owner:self options:nil];
cell = [cellFactory retain]; // get the object loadNibNamed has just created into cellFactory
cellFactory = nil; // make sure this can't be re-used accidentally
}
答案 1 :(得分:1)
我宁愿在.xib资源中创建一个单元作为第一项,然后像这样引用它:
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"LapCellID"];
if(!cell)
{
NSArray *nib = [[NSBundle mainBundle] loadNibNamed: cellNibName owner: nil options: nil];
cell = [nib objectAtIndex: 0];
}
这消除了让单元资源需要知道表控制器(cellFactory Outlet)的依赖性,从而允许在多个控制器中更容易地重用单元。