我有一张桌子。当我点击细胞segue时应该执行。我尝试使用prepareForSegue
和performSegueWithIdentifier
,但没有任何结果。
我的代码:
-(void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
{
if([segue.identifier isEqualToString:@"OpenB"]){
OpenBViewController *controller = (OpenBViewController *)segue.destinationViewController;
controller.address = self.selectedCellText;
[self performSegueWithIdentifier:@"OpenB" sender:self];
}
}
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath{
self.selectedCellText = [[[tableView cellForRowAtIndexPath:indexPath] textLabel] text];
[self performSegueWithIdentifier:@"OpenB" sender:self];
[tableView deselectRowAtIndexPath:indexPath animated:YES];
}
答案 0 :(得分:0)
首先,您不应在[self performSegueWithIdentifier:@"OpenB" sender:self];
方法中调用-prepareForSegue:
,因为当要执行segue时会调用-prepareForSegue
。
其次,检查您是否正确设置了segue。确保您在故事板中为-performSegueWithIdentifier:
答案 1 :(得分:0)
您的代码应如下所示:
-(void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
{
if([segue.identifier isEqualToString:@"OpenB"]){
OpenBViewController *controller = (OpenBViewController *)segue.destinationViewController;
controller.address = self.selectedCellText;
}
}
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath{
self.selectedCellText = [[[tableView cellForRowAtIndexPath:indexPath] textLabel] text];
[self performSegueWithIdentifier:@"OpenB" sender:self];
[tableView deselectRowAtIndexPath:indexPath animated:YES];
}
请注意在故事板中设置标识为OpenB
的segue。
答案 2 :(得分:0)
我知道这已经过时了,但只是把它留在这里以防万一发生在别人身上。
此外,所有代码都在Swift 3中,因为我对Objective C语法的了解仅次于nil。
问题很可能是在 推送segue之后didSelectRow()
方法被称为 。因此,当调用prepare(ForSegue)
时,selectedTextCell
变量尚未正确初始化。
如果您通过Interface Builder中创建的segue从单元格连接到下一个ViewController,则不需要使用didSelectRow()
,也可能不应该使用,因为segue很可能是总是在didSelectRow()
之前推。
在这种情况下,您需要做的就是从prepare()
方法中的单元格中检索信息。
签名是:
func prepare(for segue: UIStoryboardSegue, sender: Any?)
发件人是触发segue的对象。在这种情况下,选择的单元格。所以,在prepare()中,你会写这样的东西:
let myCell = sender as! UITableViewCell
controller.address = myCell.textLabel.text
例如,如果您需要访问该行,则为:
controller.idx = self.tableView.indexPath(for: sender as! UITableViewCell)?.row
当然,UITableViewCell可以替换为您可能拥有的任何自定义Cell类。