编辑:这篇文章有点长,所以最后的问题复制在这里:
所以很明显它不是检查我点击的单元格,而是检查它正在创建的一个新单元格。我将如何检查被单击的单元格,并检查该特定单元格中的内容(即检查该单元格标签的文本)。
所以在 InterfaceBuilder 我有一个原型单元格,我执行以下代码在 uitableview 中创建多个单元格
//tableview datasource delegate methods
-(NSInteger)numberOfSectionsInTableView:(UITableView *)tableView{
return 1;
}
-(NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section{
return cellIconNames.count;
}
-(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath{
static NSString *CellIdentifier = @"Cell";
cellIconName = [cellIconNames objectAtIndex:indexPath.row];
NSString *cellIconImageName = [[self cellIconImages] objectAtIndex:[indexPath row]];
CustomCell *cell = [tableView dequeueReusableCellWithIdentifier:@"Cell"];
if(cell == nil){
cell = [[CustomCell alloc]initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier];
}
cell.rightLabel.text = [cellIconNames objectAtIndex:indexPath.row];
cell.carrierImage.image = [UIImage imageNamed:cellIconImageName];
urlString = [cellButtons objectAtIndex:indexPath.row];
UIButton *button = [UIButton buttonWithType:UIButtonTypeCustom];
button.frame = CGRectMake(0, 0, 290, 88);
[button setTitle:@"" forState:UIControlStateNormal];
[button addTarget:self action:@selector(startCarrierSite:) forControlEvents:UIControlEventTouchUpInside];
[cell.contentView addSubview:button];
[cell.contentView bringSubviewToFront:button];
return cell;
}
所以基本上我所做的就是在每个单元格上制作一个图像视图、一个标签和一个透视按钮,并让各自的图像和标签根据数组表达不同的内容。
我在每个单元格中的按钮都指向同一个选择器 startCarrierSite:
这是 startCarrierSite 的方法
-(IBAction)startCarrierSite:(CustomCell *)cell;{
UILabel *rightLabel = (UILabel*) [cell.subviews objectAtIndex:0];
NSString *labelText = rightLabel.text;
if(labelText == @"Aetna"){
NSURL *url = [NSURL URLWithString:@"www.aetna.com"];
[[UIApplication sharedApplication] openURL:url];
}else{
[[UIApplication sharedApplication] openURL:[NSURL URLWithString:@"www.google.com"]];
}
}
我要做的是检查单元格的标签,如果该标签的 .text 等于某个字符串,我运行代码以打开 safari 和 blah blah blah,这不是问题。
问题是我似乎无法检查单元格中的标签。我正在尝试执行此操作的当前方法是使用 CustomCell (它是 UITableViewCell 类的子类)的参数运行操作。
这有效,并且当您单击它时会检查单元格,但是然后我去检查标签的文本并且它崩溃了。我收到错误
由于未捕获的异常“NSRangeException”而终止应用程序,原因:“ * -[__NSArrayI objectAtIndex:]:索引 4294967295 超出空数组的范围”
所以很明显它不是检查我点击的单元格,而是检查它正在创建的一个新单元格。我将如何检查被单击的单元格,并检查该特定单元格中的内容(即检查该单元格标签的文本)。
编辑(添加更新的方法):
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath;{
CustomCell *cell = (CustomCell*)[tableView cellForRowAtIndexPath:indexPath];
if ([cell.urlString isEqualToString:@"Aetna"]) {
[[UIApplication sharedApplication] openURL:[NSURL URLWithString:@"www.aetna.com"]];
}else if([cell.urlString isEqualToString:nil]){
[[UIApplication sharedApplication] openURL:[NSURL URLWithString:@"www.google.com"]];
}
}