2012-04-15 10 views
6

के बीच पास इंडेक्स संख्या जब मैं अपने UITableView में एक निश्चित सूची आइटम पर क्लिक करता हूं, तो मैं उस आइटम की अनुक्रमणिका को पास करना चाहता हूं जिसे मैंने अगले विस्तृत दृश्य पर क्लिक किया था।UITableView सूची segue

यह मेरा प्रासंगिक कोड अब तक है:

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath 
{ 
    HomeworkDetails *view = [[HomeworkDetails alloc] init]; 


    int lastIndex = [indexPath indexAtPosition:[indexPath length] - 1]; 
    NSLog(@"%u", lastIndex); 

    [self performSegueWithIdentifier: @"HomeworkDetailsSegue" sender:self]; 
    view.currentIndex = lastIndex; 

    [tableView deselectRowAtIndexPath:indexPath animated:YES]; 

} 

इस बिंदु पर, मैं सफलतापूर्वक अगले ViewController (HomeworkDetails) पर जा सकते हैं, लेकिन जानकारी के माध्यम से पारित नहीं है। मैं view.currentIndex = lastIndex; कर इसे पूरा करने की कोशिश कर रहा हूं लेकिन यह काम नहीं कर रहा है। मैं यह और कैसे कर सकता हूं? क्षमा करें अगर मुझे कुछ याद आया; मैं आईओएस विकास में एक नौसिखिया हूँ।

सुझाव के साथ

:

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


    HomeworkDetails *view = [[HomeworkDetails alloc] init]; 


    int lastIndex = [indexPath indexAtPosition:[indexPath length] - 1]; 
    NSLog(@"%u", lastIndex); 

    [self performSegueWithIdentifier: @"HomeworkDetailsSegue" sender:self]; 
    view.currentIndex = lastIndex; 

    [tableView deselectRowAtIndexPath:indexPath animated:YES]; 



} 


- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender 
{ 
    if ([segue.identifier isEqualToString:@"HomeworkDetailsSegue"]) { 

     // note that "sender" will be the tableView cell that was selected 
     UITableViewCell *cell = (UITableViewCell*)sender; 
     NSIndexPath *indexPath = [self.tableView indexPathForCell:cell]; //**error** 


     HomeworkDetails *vc = (HomeworkDetails*)[segue destinationViewController]; 
     vc.currentIndex = indexPath.row; 
    } 
} 

Error from Compiler

+0

क्या 'currentIndex' आपकी तालिका पर एक प्रदाता होने के लिए है नियंत्रक या segue के गंतव्य दृश्य नियंत्रक पर? – jonkroll

+0

यह गंतव्य ViewController पर एक संपत्ति है। गलतफहमी के लिए खेद है। साथ ही, परीक्षण करने के लिए, मैं मूल रूप से इस संपत्ति के लिए गंतव्य नियंत्रक पर एक टेक्स्ट व्यू सेट कर रहा हूं, लेकिन यह हमेशा 0 – Kgrover

उत्तर

18

जो आप वर्णन कर रहे हैं वह के बजाय prepareForSegue:sender: विधि में सबसे अच्छा किया जा सकता है। अपने स्टोरीबोर्ड में, सुनिश्चित करें कि आपकी HomeworkDetailsSegue segue आपकी तालिका दृश्य के प्रोटोटाइप सेल और गंतव्य दृश्य नियंत्रक के बीच स्थापित है।

- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender 
{  
    if ([segue.identifier isEqualToString:@"HomeworkDetailsSegue"]) { 

     // note that "sender" will be the tableView cell that was selected 
     UITableViewCell *cell = (UITableViewCell*)sender; 
     NSIndexPath *indexPath = [self.tableView indexPathForCell:cell]; 

     HomeworkDetails *vc = (HomeworkDetails*)[segue destinationViewController]; 
     vc.currentIndex = indexPath.row; 
    } 
} 

इसके अलावा, शैली की बात के रूप में, मैं HomeworkDetailsViewController करने के लिए अपने HomeworkDetails वर्ग का नाम बदलने की सिफारिश करेंगे। ऐसा करने से ऐप्पल के सम्मेलन अधिक बारीकी से आते हैं और यह स्पष्ट करता है कि कक्षा क्या दर्शाती है।

+0

मुझे इस पंक्ति पर एक त्रुटि मिलती है: 'self.tableView indexPathForCell: cell];' और संकलक कहता है कि tableView वर्तमान इंटरफ़ेस की संपत्ति नहीं है। और साथ ही, आपका क्या मतलब है "सुनिश्चित करें कि यह आपकी तालिका दृश्य कक्षों और गंतव्य दृश्य नियंत्रक के बीच स्थापित है" मुझे संदेह है कि यह समस्या हो सकती है; अभी तक, segue मेरे वर्तमान व्यू कंट्रोलर और अगले दृश्य नियंत्रक के बीच है ... मैं इसे तालिका से कैसे बना सकता हूं इसके बजाय दृश्य? – Kgrover

+0

'readyForSegue:' विधि आपके टेबलव्यू नियंत्रक की कक्षा का हिस्सा होना चाहिए, होमवर्क डिस्प्ले क्लास नहीं। सीगू सेट अप करने के लिए, स्टोरीबोर्ड में अपने टेबलव्यू के प्रोटोटाइप सेल पर क्लिक करें ताकि सेल का चयन किया जा सके। फिर उस सेल से अपने गंतव्य दृश्य नियंत्रक पर खींचते समय नियंत्रण कुंजी दबाए रखें। अंत में, संपत्ति निरीक्षक में "होमवर्क DetailsSegue" में अपने segue के लिए पहचानकर्ता लेबल सेट करें। – jonkroll

+0

यह मेरी मूल कक्षा का हिस्सा है क्योंकि मुझे विश्वास है कि यह होना चाहिए। यह कक्षा में है जहां मैंने मूल रूप से अपना सेग शुरू किया था। मैं बस इतना कह रहा हूं कि अभी सीगू व्यू कंट्रोलर से है -> स्टोरीबोर्ड में गंतव्य व्यू कंट्रोलर। क्या यह यूआईटीबल व्यू से होना चाहिए या होना चाहिए -> गंतव्य दृश्य नियंत्रक और मैं यह कैसे कर सकता हूं? साथ ही, यह जो त्रुटि दे रही है वह है संपत्ति इंडेक्सपाथफॉरसेल "होमवर्क पेज" के प्रकार पर नहीं मिला है। होमवर्क पेज मेरा मूल व्यू कंट्रोलर है जिसमें टेबल व्यू है। – Kgrover

0

आप performSegueWityIdentifier साथ यह करने के लिए segueing से पहले अपने नए दृश्य में सूचकांक संपत्ति स्थापित करना चाहिए। और इसे एक कदम आगे ले जाने के लिए, सर्वोत्तम अभ्यास कोडिंग सम्मेलन मानक prepareForSegue विधि का उपयोग करके नए दृश्य को स्थापित करने के लिए कॉल करता है।