我的问题看起来像一个普遍的问题,但似乎无法找到答案。从UITableViewCell的条件Segue导航基于对UIAlertView的响应
我有一种情况,当用户点击一个自定义的UITableViewCell时,我想显示一个警报,然后根据对警报的响应,保持在相同的视图(用户选择取消)或显示另一个视图(如果用户选择继续)。我想用故事板功能& segues来做到这一点。
怎么会这样呢?你必须以旧式的方式来做这件事吗?
我的问题看起来像一个普遍的问题,但似乎无法找到答案。从UITableViewCell的条件Segue导航基于对UIAlertView的响应
我有一种情况,当用户点击一个自定义的UITableViewCell时,我想显示一个警报,然后根据对警报的响应,保持在相同的视图(用户选择取消)或显示另一个视图(如果用户选择继续)。我想用故事板功能& segues来做到这一点。
怎么会这样呢?你必须以旧式的方式来做这件事吗?
@user,只需创建alertView旧的时尚方式;我知道任何故事板功能以不同的方式做到这一点。故事板可以帮助的地方在于赛段。您可以通过编程方式调用segues。随着你警告视图取消按钮,你可以返回(即什么都不做)。对于另一个选项,要显示另一个视图,可以通过编程方式调用一个segue来转换到所需的视图。如果在故事板上没有为某些其他原因定义适当的segue,只需创建一个按钮并使用该按钮创建segue并将其命名即可。通过在故事板中单击来命名segue,并使用属性检查器给它命名(标识符)。然后隐藏按钮或将其放在视图外。我通常会将这些类型的按钮放在工具栏上,并使用间隔符将它们放在视图外面。下面是一些示例代码:
呼叫从警报视图委托SEGUE这样的:
[self performSegueWithIdentifier: @"done" sender: self];
也实现了这个方法做任何必要的任务,为SEGUE准备:
- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
{
if ([[segue identifier] isEqualToString:@"done"])
{
// [[segue destinationViewController] setManagedObjectContext:self.managedObjectContext];
// [[segue destinationViewController] setSelectedClient:selectedClient];
}
}
你可以直接从startsViewController创建segues到多个destinationViewController,然后可以通过编程方式“执行”。你不需要为它们创建任何隐藏的按钮,这看起来像一个黑客。
好的,我想出了一个解决方案,以符合我喜欢的故事板。
实施例:
我的tableview有2个部分,分组,和细胞是动态的原型。部分0包含一行/ UITableViewCell &我不希望它继续。第1部分包含多个单元格,我希望触发细节&深入细节。
在故事板:
在源视图控制器:从我的UIBarButtonItem(添加)
在prepareForSegue方法我处理两者共用“AddTimePeriod” SEGUE我控制-拖动,沿着“通用”( vc - > vc)'EditTimePeriod'segue。
- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender {
// handle the click of the 'Add' bar button item
if([segue.identifier isEqualToString:@"AddTimePeriod"]) {
TimePeriodViewController* tpvc = (TimePeriodViewController*)segue.destinationViewController;
tpvc.delegate = self;
// database & entity stuff for adding the new one to the mOC, etc
}
// handle the click of one of the 'editable' cells -
if([segue.identifier isEqualToString:@"EditTimePeriod"]) {
TimePeriodViewController* tpvc = (TimePeriodViewController*)segue.destinationViewController;
tpvc.delegate = self;
TimePeriod * newTP = [self.timePeriodArray objectAtIndex:self.tableView.indexPathForSelectedRow.row];
tpvc.timePeriod = newTP;
}
}
然后我实现了的tableView:didSelectRowAtIndexPath方法方法,并把我的条件在这里。如果选择的行是部分零以外我手动称为EditTimePeriod SEGUE,限定发送者作为选定tableviewcell:
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
if(self.tableView.indexPathForSelectedRow.section!=0){
[self performSegueWithIdentifier:@"EditTimePeriod" sender:[tableView cellForRowAtIndexPath:indexPath]];
}
[self.tableView deselectRowAtIndexPath:indexPath animated:YES];
return;
}
将是很好的第0单元代码,使得其不可选首先! 但希望这有助于。
**然后5分钟后,我又看了一眼,意识到我可以将0节的数据移动到节头中,这更直观,而且还没有被使用。不需要任何条件/检查就可以将设计从每个tableviewcell的标准赛格开放。虽然是一个很好的锻炼:)
这就是我所做的;只是看起来像这样一个黑客,我觉得有一个更明显的方式,我忽略了。 – 2011-12-17 19:31:31
@user,如果您或其他读者发现了更好的方式,请通知我们。 – 2011-12-17 20:54:22