2013-02-11 46 views
16
if([segue.identifier isEqualToString:@"Edit"]){ 

    AddCoffeeViewController *avc = [segue destinationViewController]; 

    Coffee *coffeeObj = [appDelegate.coffeeArray objectAtIndex:arow]; 
    NSLog(@"ViewController.m prepareForSegue: arow: %d coffeeName:%@ price:%@  coffeeID:%d",arow,coffeeObj.coffeeName,coffeeObj.price,coffeeObj.coffeeID); 
    [coffeeObj setIsInEditMode:YES]; 
    avc.EditCoffeeObj = coffeeObj; 


} 

我沒有得到正確的行,當我按附件按鈕。

雖然在下面的方法,我得到正確的行。 有沒有什麼辦法,我可以得到正確的行準備繼續,如果我不想使用任何伊娃。indexpath行沒有進入準備細節的詳細披露

-(void)tableView:(UITableView *)tableView accessoryButtonTappedForRowWithIndexPath:(NSIndexPath *)indexPath{ 

arow = indexPath.row; 

} 

enter image description here


tableViewCell附件按鈕:執行模式賽格瑞(編輯)
+按鈕(導航欄按鈕項):執行模式賽格瑞(添加)

+0

爲什麼不只是地方直接賽格瑞裏面accessoryButtonTappedForRowWithIndexPath準備? – 2013-02-11 14:18:18

+0

我想通過咖啡類對象。如果使用[self performSegueWithIdentifier:@「Edit」sender:nil];那麼有沒有我可以通過Coffee類對象。 – 2013-02-11 14:27:10

+0

注意:從附件按鈕調用segue最早是在iOS6中引入的。一個很好的解決方法是創建一個自定義單元格並添加一個按鈕並從該按鈕調用segue。 – Groot 2013-02-11 14:48:55

回答

34

如果您已將迷你配件動作連接到故事板中,那麼prepareForSegue:sender:中的sender將是被點擊的單元格。這意味着你可以做這樣的事情

NSIndexPath *indexPath = [self.tableView indexPathForCell:sender]; 
+0

嘿你的解決方案是正確的。謝謝很多。我不明白爲什麼有些人會對我的問題給予負面的評價。只是嘗試一下,你會面臨同樣的問題。 – 2013-02-11 14:41:00

+0

愛你的傢伙。非常感謝 – 2013-11-20 12:46:54

+0

感謝很多傢伙。 – shaikh 2013-12-04 09:44:51

3

附件按鈕竊聽和選定的行是兩個不同的東西。在accessoryButtonTappedForRowWithIndexPath中,只需將indexPath設置爲全局變量,然後在segue中使用它。

0

SWIFT 3.0解決方案;與Objective-C版本非常相似。因此,細胞是發送者和我們收到indexPath通過細胞在附件壓

override func prepare(for segue: UIStoryboardSegue, sender: Any?) { 
    if let destination = segue.destination as? YourViewController { 
     let indexPath = tableView.indexPath(for: sender as! UITableViewCell)! 
    } 
} 
相關問題