如何在自定义方法中访问UITableViewCell中的对象?

时间:2012-10-19 23:16:07

标签: ios iphone uitableview

编辑:这篇文章有点长,所以最后的问题在这里复制:

  

所以显然它不是检查我点击的单元格,它正在检查a   它正在创造的新细胞。我该如何检查细胞   单击,然后检查该特定内容   单元格(即检查该单元格标签的文本)。

所以在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;
}

所以基本上我所做的是在每个单元格上制作一个imageview,一个标签和一个seethrough按钮,并根据一个数组使相应的图像和标签说出不同的东西。

我在每个单元格中的按钮指向相同的选择器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,等等等等等等,这不是问题。< / p>

问题是我似乎无法检查单元格中的标签。我尝试这样做的当前方法是使用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"]];
    }

}

1 个答案:

答案 0 :(得分:2)

使用此UITableViewDelegate方法:

tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath

从那里,您可以使用[tableView cellForRowAtIndexPath:indexPath]

访问单元格

修改

另外,请勿将字符串与yourString == @"someString"进行比较。

使用[yourString isEqualToString:@"someString"]

* 编辑2 *

向CustomCell添加属性

@property (nonatomic) NSString *urlString;

在创建单元格时设置属性,然后在didSelectRowAtIndexPath方法中执行此操作;

CustomCell *cell = (CustomCell*)[tableView cellForRowAtIndexPath:indexPath];

现在,网址只是cell.urlString