如何将 [didSelectRowAtIndexPath] 选中的单元格变成字符串供以后使用
Posted
技术标签:
【中文标题】如何将 [didSelectRowAtIndexPath] 选中的单元格变成字符串供以后使用【英文标题】:How to turn [didSelectRowAtIndexPath] selected cell into a string for later use 【发布时间】:2014-05-20 01:16:57 【问题描述】:我正在寻找一种方法来添加通过didDismissWithButtonIndex:
方法在表格中选择的didSelectRowAtIndexPath:
“单元格名称”:
- (void)alertView:(UIAlertView *)alertView didDismissWithButtonIndex:(NSInteger)buttonIndex
if (buttonIndex == 1)
Database *currentStore = [DBList objectAtIndex:indexPath.row];
NSString *requestStr = @"http://";
requestStr = [requestStr stringByAppendingString:hostTextField.text];
requestStr = [requestStr stringByAppendingString:@":8080/compfile2.php?password="];
requestStr = [requestStr stringByAppendingString:passwordTextField.text];
requestStr = [requestStr stringByAppendingString:@"&db=latinbites"];
requestStr = [requestStr stringByAppendingString:currentStore];
显然,
Database *currentStore = [DBList objectAtIndex:indexPath.row];
不正确。有没有办法在选定的单元格行上放置一个字符串?
【问题讨论】:
我不确定您如何将 UIAlertViewDelegate didDismissWithButtonIndex 与表视图的 didSelectRowAtIndexPath 相关联。您想模拟用户在表格视图上触摸以选择与按钮索引对应的单元格吗? indexPath.row 来自哪里? 是的,你最后说的。 我表中的单元格是来自查询的单个对象(数据库):[SHOW DATABASES] 【参考方案1】:我相信我了解您想要实现的目标。尝试以下代码:-
没有。 1 - 用 NSString 声明一个属性
@interface TableViewController ()<UITableViewDataSource,UITableViewDelegate>
@property (nonatomic,strong) NSString * selectedCellName;
@end
没有。 2 - 在 didSelectRowAtIndexPath
-(void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
UITableViewCell* cell = [tableView cellForRowAtIndexPath:indexPath];
self.selectedCellName = cell.textLabel.text;
没有。 3 - 在 didDismissWithButtonIndex 中,附加单元格名称。
- (void)alertView:(UIAlertView *)alertView didDismissWithButtonIndex:(NSInteger)buttonIndex
if (buttonIndex == 1)
NSString *requestStr = @"http://";
requestStr = [requestStr stringByAppendingString:hostTextField.text];
requestStr = [requestStr stringByAppendingString:@":8080/compfile2.php?password="];
requestStr = [requestStr stringByAppendingString:passwordTextField.text];
requestStr = [requestStr stringByAppendingString:@"&db=latinbites"];
requestStr = [requestStr stringByAppendingString:self.selectedCellName];
【讨论】:
为我工作!谢谢! 没问题。也感谢您接受作为答案。我很高兴能够帮助您。 ;)【参考方案2】:尽管您想做的事情令人困惑(为什么不让他们点击桌子,而不是警报视图?),但可以做到。
首先,请参阅 How to programmatically “tap” a UITableView cell? - 之后您需要创建一个 NSIndexPath
对象以发送到该方法。
NSIndexPath *cellToTap = [NSIndexPath indexPathForRow:buttonIndex inSection:theSection];
theSection 应该是什么取决于您。如果您的表格视图中只有一个部分,则为 0。
【讨论】:
在我的应用程序中,点击单元格会显示警报视图和两个选项。 (取消,添加)。添加按钮将一堆信息添加到 SQLite 数据库中。 很公平。好吧,只需调用 didSelectRowAtIndexPath 就可以了。在调用此方法之前 tableView 所做的事情是装饰性的,任何模型更改都由您决定 - 因此您获得的效果与您实际上用手指敲击该单元格一样。【参考方案3】:我认为您正在寻找名为 indexPathForSelectedRow
的 UITableView 方法。只要还有选择,这将回答您需要的索引路径。
如果选择可能会丢失(在用户选择之后并且在解除警报之前),那么更安全的选择是在触发 didSelect 方法时将选择记录在属性中。
- (void)alertView:(UIAlertView *)alertView didDismissWithButtonIndex:(NSInteger)buttonIndex
if (buttonIndex == 1)
NSIndexPath *indexPath = [self.tableView indexPathForSelectedRow];
Database *currentStore = DBList[indexPath.row];
// ...
【讨论】:
以上是关于如何将 [didSelectRowAtIndexPath] 选中的单元格变成字符串供以后使用的主要内容,如果未能解决你的问题,请参考以下文章