我使用的故事板,我有一個UITableView。我有一個segue設置,從我的桌子上推到細節VC。但是,我應該使用哪種方法來處理這個問題?我將不得不將幾個對象傳遞給詳細視圖。但是,我使用didSelectRowAtIndex
還是-(void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
?爲UITableView使用didSelectRowAtIndexPath或prepareForSegue方法?
98
A
回答
194
如果你使用prepareForSegue:sender:
,那麼如果你以後決定從表視圖之外的某個控件中觸發segue,則不會有太多改變。
的prepareForSegue:sender:
消息發送到當前視圖控制器,所以我建議是這樣的:
- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
{
// Assume self.view is the table view
NSIndexPath *path = [self.tableView indexPathForSelectedRow];
DetailObject *detail = [self detailForIndexPath:path];
[segue.destinationViewController setDetail:detail];
}
在斯威夫特:
override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {
let path = self.tableView.indexPathForSelectedRow()!
segue.destinationViewController.detail = self.detailForIndexPath(path)
}
5
我這樣做,它的工作
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath{
NSLog(@"Row Selected = %i",indexPath.row);
[self performSegueWithIdentifier:@"testID" sender:self.view];
}
0
如果您使用prepareForSegue:
,則可以檢查發件人是誰並執行不同的c頌
例如在迅速
override func prepareForSegue(segue: UiStoryboardSegue, sender: AnyObject?)
{
var senderIsTableviewCell:Bool! = sender?.isKindOfClass(UITableViewCell)
if senderIsTableviewCell
{
//do something
}
}
+2
只要做:*如果讓tableViewCell =發件人爲?UITableViewCell {//做某事} *。如果發件人不能轉換爲UITableViewCell,則「執行某些操作」將不會執行。 – mbeaty
1
如果您的tableView財產在類和你只有一個部分,那麼你可以使用tag
屬性單元格的列存儲,如:
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"cell"];
cell.tag = indexPath.row;
return cell;
}
然後您可以訪問它,因爲sender
與其標記中的行值相同的單元格:
- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender {
MyDestinationViewController *destinationViewController = segue.destinationViewController;
destinationViewController.myProperty = [tableViewElementsArray objectAtIndex:[sender tag]]; // sender will be your cell
}
3
當發件人是UITableViewCell時,您可以要求UITableView查詢單元格的indexPath。
override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {
if let cell = sender as? UITableViewCell {
let indexPath = self.tableView.indexPathForCell(cell)!
assert(segue.destinationViewController.isKindOfClass(DetailViewController))
let detailViewController = segue.destinationViewController as! DetailViewController
detailViewController.item = self.items[indexPath.row] // like this
}
}
1
如果發送者細胞是不可選的,選擇的小區self.tableView.indexPathForSelectedRow
回報,但不原因請看發件人細胞。最好的辦法是讓indexPath爲賽格瑞發件人:
- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender {
((MyViewController *)[segue destinationViewController]).senderIndexPath = [self.tableView indexPathForCell:sender];
}
在斯威夫特:
override func prepareForSegue(segue: NSStoryboardSegue, sender: AnyObject?) {
(segue.destinationController as! MyViewController).senderIndexPath = self.tableView.indexPathForCell(sender)
}
相關問題
- 1. didSelectRowAtIndexPath或prepareForSegue使用?
- 2. UITableView didSelectRowAtIndexPath與prepareForSegue但didLoadView不叫
- 3. PrepareForSegue before didSelectRowAtIndexPath
- 4. 的UITableView-didSelectRowAtIndexPath方法的問題時,調用didSelectRowAtIndexPath方法
- 5. 在iOS應用中,爲什麼會出現prepareForSegue didSelectRowAtIndexPath方法
- 6. 的UITableView didSelectRowAtIndexPath方法方法不點火
- 7. UITableView的didSelectRowAtIndexPath方法沒有被調用
- 8. 無法觸發UITableView委託方法「DidSelectRowAtIndexPath」
- 9. 劫掠或阻止UITableView didSelectRowAtIndexPath
- 10. UIButton攔截UITableView的didSelectRowAtIndexPath方法
- 11. UITableView didSelectRowAtIndexPath
- 12. UITableView DidSelectRowAtIndexPath?
- 13. 的UITableView在UIPageViewController不能調用方法didSelectRowAtIndexPath方法
- 14. 如何在prepareForSegue之前調用didSelectRowAtIndexPath?
- 15. UITableView - didSelectRowAtIndexPath問題?
- 16. prepareForSegue()方法
- 17. 用PrepareForSegue方法從UITableView傳遞到另一個
- 18. 在didSelectRowAtIndexPath方法
- 19. 如何在didSelectRowAtIndexPath之後運行prepareForSegue?
- 20. -didSelectRowAtIndexPath:未在UITableView中調用
- 21. UITableView didSelectRowAtIndexPath調用兩次
- 22. iPhone - UITableView不調用3.0 SDK中的didSelectRowAtIndexPath方法
- 23. iPhone - 用UITableview didSelectRowAtIndexPath方法顯示覆蓋圖
- 24. 我應該使用didSelectRowAtIndexPath,prepareForSegue還是兩者?
- 25. UITableView無法滾動後底部didselectRowAtIndexPath
- 26. UITableVIew didSelectRowAtIndexPath無法進入新頁面
- 27. didSelectRowAtIndexPath方法的UIButton
- 28. EXC_BAD_ACCESS在didSelectRowAtIndexPath方法
- 29. PFQueryTableViewController的didSelectRowAtIndexPath方法
- 30. EXC_BAD_ACCESS在didSelectRowAtIndexPath方法
好了,你可以給一個如何使用通過基於indexPath對象實現它的例子。 – Jon
我已經更新了我的答案。 –
不應該'self.view'只是'發件人'在這裏?我甚至無法得到'[self.view indexPathForSelectedRow]'工作,我不得不''[發件人indexPathForSelectedRow];' – ladookie