我有一个使用自定义UITableViewCell
和自定义UIButton
的应用。其名称为CustomCell
和CustomButton
CustomButton
和CustomCell
都有标识符。 CustomButton
有buttonIdentifier
,CustomCell
有cellIdentifier
。创建表时,它们都获得相同的ID。此单元格还有另一个名为projectFullName
的自定义属性。
示例:
NSString *tempString = @"temp"; // The content is always different
button.buttonIdentifier = tempString;
cell.cellIdentifier = tempString;
cell.projectFullName = @"temp"; // The content is always different
现在,我想要做的是,当我按下按钮时,我也得到了单元格textLabel
的内容。所以我基本上做的是。
-(void)editProject:(id)sender {
stringEditIdentifier = ((CustomButton *)sender).projectButtonIdentifier;
UIAlertView *alertView = [[UIAlertView alloc] initWithTitle:@"Projektname"
message:@""
delegate:self
cancelButtonTitle:@"Abbrechen"
otherButtonTitles:@"Speichern", nil];
[alertView setAlertViewStyle:UIAlertViewStylePlainTextInput];
[alertView show];
}
但我现在想要做的是通过执行以下操作预填充输入字段
[alertView textFieldAtIndex:0].text = labelCellName;
labelCellname
是我之前分配的textLabel
文字的名称。由于CustomCell
和CustomButton
具有相同的标识符,我认为获取内容相当容易,但我的应用始终崩溃。这就是我的尝试。
首先尝试
CustomButton *buttonTemporary = (CustomButton *)sender;
CustomCell *cellTemporary = (CustomCell *)[buttonTemporary superview];
NSString *labelCellName = cellTemporary.projectFullName;
错误
UITableViewCellScrollView projectFullName]: unrecognized selector sent to instance 0xa895df0
2013-12-17 14:17:09.279 TodolistiOS[17702:70b] *** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[UITableViewCellScrollView projectFullName]: unrecognized selector sent to instance 0xa895df0'
第二次尝试
int row = ((CustomButton *)sender).tag;
NSIndexPath* indexPath = [NSIndexPath indexPathForRow:row inSection:0]; // in case this row in in your first section
CustomCell* cell = (CustomCell *)[tableView cellForRowAtIndexPath:indexPath];
NSString *labelCellName = cell.projectFullName;
错误
应用程序崩溃没有错误。但是,如果我在UITableView
中有三个条目,它们都有不同的名称labelCellName
,则始终是第一个条目的名称。所以当我点击第二个条目中的CustomButton
时,我仍然会得到第一个条目的名称。我究竟做错了什么?我希望我已经提供了足够的信息,因为我的上一个问题并不是那么好。
第三次尝试
CustomButton *button = (CustomButton*)sender;
NSIndexPath *myIP = [NSIndexPath indexPathForRow:button.tag inSection:0];
CustomCell *cellT = (CustomCell*)[tableView cellForRowAtIndexPath:myIP];
NSString *testTemp = cellT.projectFullName;
NSLog (@"%@" , testTemp );
错误
与第二次尝试相同
另外,当我这样做时
CustomButton *button = (CustomButton*)sender;
NSLog ( @"%d", button.tag );
button.tag始终为空。是这个,因为我没有设置它?如果是,我应该如何正确设置?我的意思是,价值是动态的,因为我永远不会知道我会有多少条目!是否无法通过cellIdentifier
和buttonIdentifier
获取它,因为它们无论如何都是相同的?
第四次尝试
我现在手动为按钮添加了标签ID。
editButton.tag = tagCount;
tagCount = tagCount+1;
这一直有效,直到我向CustomCell
UITableView
添加新行。然后tagCount搞砸了,它不再起作用了。
答案 0 :(得分:0)
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
[[customCell button] setTag:indexPath.row];
return cell;
}
单击按钮时,获取文本标签的单元格和文本:
UITableViewCell cell = [(UITableViewCell *)[(UITableView *)self cellForRowAtIndexPath: [NSIndexPath indexPathForRow:button.tag inSection:0]];
NSString *text = [cell yourLabel].text;
当然,你必须在你的uitableviewcell类中定义你的按钮和你的标签作为属性。
答案 1 :(得分:0)
我现在设法做了一个自己的解决方案。但这似乎不对。我正在使用for循环遍历CustomCell
中的每个UITableView
。但是当我有1000个条目时,这可能是性能问题,不是吗?
stringEditIdentifier = ((CustomButton *)sender).projectButtonIdentifier;
NSString *labelCellText = @"";
for(int i = 0; i < [tableView numberOfRowsInSection:0]; i++)
{
NSIndexPath *index = [NSIndexPath indexPathForRow:i inSection:0];
CustomCell *cell = (CustomCell *)[tableView cellForRowAtIndexPath:index];
NSString *textFieldVal = [cell.textLabel text];
NSString *cellIdentifier = cell.projectCellIdentifier;
if ( [cellIdentifier isEqualToString:stringEditIdentifier ] ){
labelCellText = textFieldVal;
}
}
UIAlertView *alertView = [[UIAlertView alloc] initWithTitle:@"Projektname"
message:@""
delegate:self
cancelButtonTitle:@"Abbrechen"
otherButtonTitles:@"Speichern", nil];
[alertView setAlertViewStyle:UIAlertViewStylePlainTextInput];
[alertView textFieldAtIndex:0].text = labelCellText;
[alertView show];