gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-29 11:07:36 24 4
gpt4 key购买 nike

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

So obviously it is not checking the cell I am clicking, it is checking a new cell that it is creating. How would I go about checking the cell that is clicked, and checking the content that is in that specific cell (i.e. checking the text of that cell's label).

所以在 InterfaceBuilder 中我有一个原型(prototype)单元格,我执行以下代码在 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 、一个标签和一个透明按钮,并根据数组使相应的图像和标签表达不同的内容。

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

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

}

最佳答案

使用这个 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];

现在 URL 只是 cell.urlString

关于ios - 如何在自定义方法中访问 UITableViewCell 中的对象?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12983679/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com