2014-10-09 3 views
25
- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender 
    { 
    if ([segue.identifier isEqualToString:@"Action"]) 
    { 
     NSIndexPath *indexPath = [self.tbl indexPathForSelectedRow]; 
     SecondViewController *destViewController = segue.destinationViewController; 
     destViewController.getString = [getArray objectAtIndex:indexPath.row]; 
    } 
} 

में indexpath पाने के लिए मैं चयनित पंक्ति index तक पहुँचने के लिए करना चाहते हैं, लेकिन हर चयनित पंक्ति के लिए null दिखा। कृपया मेरी मदद करें?कैसे prepareForSegue

+0

Pls self.tbl जाँच! = – Matz

+0

शून्य आप नहीं है स्टोरीबोर्ड में टेबलब्लू के लिए टीबीएल वैरिएबल का कनेक्शन बनाया गया। – Rajesh

उत्तर

25

स्विफ्ट 3.0/iOS 10

tableView.indexPathForSelectedRow तरह आईओएस में पेश किया गया था 9

override func prepare(for segue: UIStoryboardSegue, sender: Any?) { 
    if let indexPath = tableView.indexPathForSelectedRow{ 
     let selectedRow = indexPath.row 
     let detailVC = segue.destination as! ParkDetailTableVC 
     detailVC.park = self.parksArray[selectedRow] 
    } 
} 
+0

इसके अलावा संग्रह विचारों पर समानांतर संपत्ति ध्यान दें, 'indexPathsForSelectedItems', इसलिए की तरह इस्तेमाल किया जा सकता है जो: ' '' अगर जाने selectedIndexPathRow = collectionView .indexPathsForSelectedItems प्रथम .row { doStuff (साथ?? MyDataSourceArr [selectedIndexPathRow] } '' – AmitaiB

+0

इस सरल समाधान ने मेरा दिन बचाया :) – iPhoneDeveloper

+0

धन्यवाद! यह मुझे बचा लिया है! –

0

क्षमा करें, मुझे समझ में नहीं आता कि आप क्या करना चाहते हैं। यह UITAbleViewDelegate की इस पद्धति के माध्यम से indexPath.row मिलता है कि यह जब आप अपने tableView की सेल का दोहन कहा जाता है संभव है:

-(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath{ 

    self.myVariable = indexPath.row 
} 

और उसके बाद आप इस तरह से prepareForSegue में इस मूल्य पर पहुंच सकता है:

- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender{ 
     //do something with self.myVariable 
} 

मुझे उम्मीद है कि मैंने आपकी मदद की है।

+0

यह आवश्यक नहीं है कि उस सेल को टैप करने से आपका सेग्यू बढ़ जाता है। काम नहीं करेगा – Spacemonkey

63

दो मामलों:

1) Segue अपने didSelectRowAtIndexPath विधि से से viewController

कॉल segue जुड़ा हुआ है, पारित indexPath रूप sender

-(void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath 
{ 
    [self performSegueWithIdentifier:@"Action" sender:indexPath]; 
} 

तो फिर तुम prepareForSegue:sender: विधि में प्रेषक के रूप में प्राप्त कर सकते हैं indexPath

- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender 
{ 
    if ([segue.identifier isEqualToString:@"Action"]) 
     { 
      NSIndexPath *indexPath = (NSIndexPath *)sender; 
      SecondViewController *destViewController = segue.destinationViewController; 
      destViewController.getString = [getArray objectAtIndex:indexPath.row]; 
     } 
    } 

2) सेल

कोई ज़रूरत नहीं से जुड़े segue didSelectRowAtIndexPath विधि और performSegueWithIdentifier: लागू करने के लिए है.आप सीधे UITableviewCell के रूप में प्राप्त कर सकते हैं senderprepareForSegue:sender: विधि में।

- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender 
{ 
    if ([segue.identifier isEqualToString:@"Action"]) 
    { 
     NSIndexPath *indexPath = [self.tableView indexPathForCell:sender]; 
     SecondViewController *destViewController = segue.destinationViewController; 
     destViewController.getString = [getArray objectAtIndex:indexPath.row]; 
    } 
} 
+1

@PintuRajput, अगर आप सीधे से सेल से segue कनेक्ट किया है, तो आप इसे इस तरह से नहीं करना चाहिए। उस स्थिति में, प्रेषक तर्क सेल होगा, और आप प्रेषक से अनुक्रमणिका पाथ प्राप्त करने के लिए तालिका दृश्य विधि अनुक्रमणिका पाथफॉरसेल का उपयोग कर सकते हैं। यदि आपका सेग्यू सेल से है, तो आपको didSelectRowAtIndexPath लागू नहीं करना चाहिए, या performSegue पर कॉल करना चाहिए। – rdelmar

+0

सच है, मेरे मामले में ViewController से segue खुद। –

+0

जानकारी के लिए धन्यवाद! – Tommy

3

इस

- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(UITableViewCell *)sender { 
    FTGDetailVC *detailVC = (id)segue.destinationViewController; 
    NSIndexPath *indexPath = [self.tableView indexPathForCell:sender]; 

    FTGNote *note = self.notes[indexPath.row]; 
    [detailVC updateWithNote:note]; 
} 
संबंधित मुद्दे