我的問題看起來像一個普遍的問題,但似乎無法找到答案。從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