我在texLabel
确定了UITableViewCell
cellForRowAtIndexPath
的设置方式,问题是当从agendaTableArray
拉出时,它会重复表格的每个部分中的项目,而不是仅在其所属的部分中。换句话说,我希望数组中的每个项目都在其自己的部分中。
以下是目前的情况:
以下是我设置cellForRowAtIndexPath
的方式:
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
static NSString *MyIdentifier = @"MyReuseIdentifier";
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:MyIdentifier];
if (!cell) {
cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:MyIdentifier];
cell.textLabel.text = nil;
}
self.agendaTableArray = @[@"Dinner with Rebekah", @"Soccer game", @"Denist appt.", @"Celebrate job offer, drinks with Pierre!", @"No events today!"];
// Set title of the event
if (self.datePicked == [NSNumber numberWithInt:16]) {
NSLog(@"cellForRowAtIndexPath says self.datePicked is 16");
}
else if (self.datePicked == [NSNumber numberWithInt:17]) {
NSLog(@"cellForRowAtIndexPath says self.datePicked is 17");
}
else if (self.datePicked == [NSNumber numberWithInt:18]) {
NSLog(@"cellForRowAtIndexPath says self.datePicked is 18");
}
else if (self.datePicked == [NSNumber numberWithInt:19]) {
NSLog(@"cellForRowAtIndexPath says self.datePicked is 19");
}
else {
}
cell.textLabel.text = self.agendaTableArray[indexPath.row];
cell.textLabel.font = [UIFont systemFontOfSize:14];
[self whatSectionsAreVisible];
return cell;
}
如何将其设置为仅在第一部分的单元格中加载agendaTableArray
的项目?
答案 0 :(得分:3)
首先,你应该使用它:
- dequeueReusableCellWithIdentifier:forIndexPath:
而不是
- dequeueReusableCellWithIdentifier
即使不是绝对必要,here也很好地解释了为什么要这样做。
其次,每次请求绘制一个单元格时,您都要分配一个新数组,如果由于任何原因您决定更改某个元素,它将不起作用,此行应该在您的{{1}中提高绩效:
viewDidLoad
第三,你永远不应该将NSNumber值与self.agendaTableArray = @[@"Dinner with Rebekah", @"Soccer game", @"Denist appt.", @"Celebrate job offer, drinks with Pierre!", @"No events today!"];
进行比较,两个NSNumber只有当它们实际上是同一个对象而不是它的实际值时才会完全相同(==
),比较你需要使用两个NSNumber isEqualToNumber:
==
最后为每个部分设置一个不同的元素:
// Assuming datePicked is a NSNumber
([self.datePicked isEqualsToNumber:[NSNumber numberWithInt:16]])
答案 1 :(得分:0)
你正在重复使用单元格,就在
之后Map<String, List<String>> headers = new HashMap<String, List<String>>();
headers.put("SOAPAction", Arrays.asList("myPrefix:mySoapMethod"));
proxy.getRequestContext().put(Message.PROTOCOL_HEADERS, headers);
设置
if (!cell)
{
cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:MyIdentifier];
}
答案 2 :(得分:0)
您可以使用以下方法检查cellForRowAtIndexPath所在的部分:
if(indexPath.section==0){
//Logic for section 0
}else if(indePath.section==1){
//Logic for section 1
}
其中如果您想要第一部分的第一行,则可以执行此操作:
if(indexPath.section==0 && indexPath.row==0){
//Code here
}
我希望有所帮助。当然不是&amp;&amp;你可以在第一个内部嵌入indexPath.row == 0 if if like:
if(indexPath.section==0){
if(indexPath.row==0){
//Code here
}
}
答案 3 :(得分:0)
首先
将includes
设置在其他位置,例如agendaTableArray
,init
或viewDidLoad
。
我也猜测你有viewWillAppear
这样的东西
numberOfSectionsInTableView:
- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView {
return N; // the number of sections you want to display
}
numberOfRowsInSection:
然后你可能想要比较这些数字可能就像这样
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
return self.agendaTableArray.count;
}
在这种情况下,我建议使用if ([self.datePicked intValue] == 16) {
NSLog(@"cellForRowAtIndexPath says self.datePicked is 16");
}
条件
使用switch
最后选择这一行
isEqualsToNumber:
超出if条件
我的建议
您可能想要创建自定义cell.textLabel.text = nil;
并使用默认单元格样式UITableViewCell
对其进行初始化,然后覆盖单元格UITableViewCellStyleSubtitle
以重置可重复使用单元格的内容。
然后在prepareForReuse
中你可以注册,你可以处理if条件viewDidLoad
这样你的代码看起来更模块化和更清洁