![](/img/trans.png)
[英]Segue from TableViewController to another TableViewController
[英]iOS 5 - Segue from one TableViewController to another TableViewController
我正在嘗試從一個TableViewController中選擇一個詳細信息公開按鈕(或一行)並轉到另一個TableViewController,而不從第一個TableViewController傳遞任何數據到第二個TableViewController。 所以幾乎第一個TableViewController充當一個表,它將導航到不同的TableViewControllers,具體取決於所選的詳細公開按鈕(或行)。
到目前為止,我執行此操作的代碼如下所示:
- (void)tableView:(UITableView *)tableView accessoryButtonTappedForRowWithIndexPath:(NSIndexPath *)indexPath {
NSUInteger rowNumber = [indexPath row];
NSString *categoryCode = [self.categoryCodes objectAtIndex:rowNumber];
self.categoryData = [self.commuterDict objectForKey:categoryCode];
[self performSegueWithIdentifier:@"ShowPlaces" sender:self];
}
- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender {
if ([[segue identifier] isEqualToString:@"ShowPlaces"]) {
PlacesViewController *placesViewController = [segue destinationViewController];
// --> I believe I'm missing something here to access a specific row? <--
}
}
我希望有一個人可以幫助我!
您從tableView中的indexPath獲取特定行:accessoryButtonTappedForRowWithIndexPath:function。 具體來說,被挖掘的行是indexPath.row。 (如果你的表有多個部分,那么你也可以讀取indexPath的部分,但聽起來你只是使用一個簡單的表。)
您可以將當前行存儲在變量中,然后在prepareForSegue:sender中讀取它以選擇去哪里。
UIViewController的-prepareForSegue:sender:
的文檔說:
因為segues可以從多個源觸發,所以您可以使用segue和sender參數中的信息來定義segue的上下文並傳遞適當的信息。 例如,如果segue源自表視圖,則sender參數將標識用戶點擊的表視圖單元格。 您可以使用該信息在目標視圖控制器上設置數據。
鑒於此,我首先查看sender
參數,並期望它是指向表格單元格的指針。 如果您知道單元格應該在哪個表中,則可以使用-indexPathForCell:
來檢索單元格的索引路徑。
您用於准備segue的發件人可以是您想要的任何人。 如果您想知道該行,請發送行或索引路徑:
- (void)tableView:(UITableView *)tableView accessoryButtonTappedForRowWithIndexPath:(NSIndexPath *)indexPath {
NSUInteger rowNumber = [indexPath row];
NSString *categoryCode = [self.categoryCodes objectAtIndex:rowNumber];
self.categoryData = [self.commuterDict objectForKey:categoryCode];
[self performSegueWithIdentifier:@"ShowPlaces" sender:indexPath];
}
- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender {
if ([[segue identifier] isEqualToString:@"ShowPlaces"]) {
PlacesViewController *placesViewController = [segue destinationViewController];
// Row information is supplied as the sender
NSIndexPath *indexPath = sender;
}
}
如果要使用實際行,請將其作為發件人
[self performSegueWithIdentifier:@"ShowPlaces" sender:[tableView cellForRowAtIndexPath:indexPath]];
您可以將segue從視圖控制器拖動到按下詳細信息顯示按鈕時要顯示的視圖。 您可以從代碼中觸發segue,如下所示
-(void)tableView:(UITableView *)tableView accessoryButtonTappedForRowWithIndexPath:(NSIndexPath *)indexPath
{
[self performSegueWithIdentifier:@"UpdateData" sender:self];
}
來自奧地利馬丁的干杯
如果您的發件人對象是tableviewcell,則以下代碼段應該有效:
NSIndexPath *indexPath = [[[segue sourceViewController] tableView] indexPathForCell:sender];
否則試試
NSIndexPath *indexPath = nil;
if ([sender isMemberOfClass:[UITableViewCell class]])
{
indexPath = [[[segue sourceViewController] tableView] indexPathForCell:sender];
}
else if ([[sender superview] isMemberOfClass:[UITableViewCell class]])
{
indexPath = [[[segue sourceViewController] tableView] indexPathForCell:(UITableViewCell *)[sender superview]];
}
else if ([[[sender superview] superview] isMemberOfClass:[UITableViewCell class]])
{
indexPath = [[[segue sourceViewController] tableView] indexPathForCell:(UITableViewCell *)[[sender superview] superview]];
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.