是否可以使用静态数据设置UITableView / UITableViewController?或者是否总是需要填写UITableViewDataSource协议并返回单个条目并按需创建单元格?
在这种情况下,我想要做的就是使用快速的tableview控制器让用户从一个不会改变的已知值的简短列表中进行选择。为静态数据填写所有这些函数似乎需要做很多额外的工作。
答案 0 :(得分:3)
“静态数据”是指硬编码而不是数据源?
无论哪种方式,过程都是一样的。你必须通过cellAtIndexPath返回单元格:你可以用“if块”完成这个,假设你想要的只是一些硬编码的行。
例如:
// How many sections in the table? Hard coded to 1 here
- (NSInteger) numberOfSectionsInTableView:(UITableView *)tableView {
return 1;
}
// How many rows in the table? Hard coded to 2 here
- (NSInteger) tableView: (UITableView *) tableView numberOfRowsInSection:(NSInteger)section {
return 2;
}
// Method for returning data from anywhere, even hard coded
// Notice how we use row and section, these tell us which cell in the table we are returning
- (UITableViewCell *)tableView: (UITableView *)tableView cellForRowAtIndexPath: (NSIndexPath *)indexPath
{
NSInteger row = [indexPath row];
NSInteger section = [indexPath section];
// Dequeue a cell using a common ID string of your choosing
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"myCellID"];
// Return cells with data/labels/pretty colors here
if (row == 0)
{
cell.textLabel.text = @"I can haz cheezburger";
}
else if (row == 1)
{
cell.textLabel.text = @"I hate lol catz";
}
// Pretty em up here if you like
cell.selectionStyle = UITableViewCellSelectionStyleGray;
cell.textLabel.lineBreakMode = UILineBreakModeWordWrap;
return cell;
}
一旦你了解了Cocoa方式,它就非常简单,但它不是“简单”。