2012-02-01 9 views
5

मैंने UITableViewCell का उप-वर्ग बनाया है। अब तक, मैं केवल उन सेल का उपयोग कर रहा हूं जो मेरी स्टोरीबोर्ड में "डिज़ाइन" है जहां मैं segues सेट कर सकता हूं।UITableViewCell के उप-वर्ग को कैसे सीक करें?

- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender { 
    [super prepareForSegue:segue sender:sender]; 

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

    if ([[segue identifier] isEqualToString:@"showNews"]) { 
     NewsViewController *newsViewController = [segue destinationViewController]; 
     News *news = (News*)[self.fetchedResultsController objectAtIndexPath:indexPath]; 
     newsViewController.news = news; 
    } 
} 

के बाद मेरे द्वारा बनाए गए UITableViewCell की मेरी उपवर्ग मैं, स्टोरीबोर्ड उपयोग करने के लिए कस्टम सेल के लिए segues बनाने में सक्षम नहीं रह गया हूँ ना? मैंने स्टोरीबोर्ड में एक सेल बनाने की कोशिश की है और अपनी कक्षा को अपनी कस्टम कक्षा में सेट किया है - लेकिन जब मैं ऐप चलाता हूं तो सेल खाली होता है।

बजाय मैं सिर्फ alloc हूँ और अपने tableView:cellForRowAtIndexPath में कस्टम सेल init:

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath 
{ 
    static NSString *CellIdentifier = @"WSTableViewCell"; 

    WSTableViewCell *cell = (WSTableViewCell*)[tableView dequeueReusableCellWithIdentifier:CellIdentifier]; 
    if (cell == nil) { 
     cell = [[WSTableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier]; 
    } 

    WSObject *item = [self.fetchedResultsController objectAtIndexPath:indexPath]; 
    [cell.titleLabel setText:item.title]; 

    return cell; 
} 

फिर tableView:didSelectRowAtIndexPath में मैं, NewsViewController बनाने के लिए कोशिश कर रहा हूँ समाचार की स्थापना और navigationController को धक्का:

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath 
    News* news = [self.fetchedResultsController objectAtIndexPath:indexPath]; 
    NewsViewController *newsViewController = [[NewsViewController alloc] init]; 
    newsViewController.news = news; 
    [[self navigationController] pushViewController:newsViewController animated:YES]; 
} 

लेकिन जब मैं एक पंक्ति मेरी NewsViewController नहीं दिखाया गया है का चयन करें - लेकिन इसके बजाय मैं एक काले रंग की पृष्ठभूमि के साथ एक खाली दृश्य देख। मैं इससे कैसे निपट सकता हूं? क्या अभी भी seques का उपयोग करना संभव है?

उत्तर

3

मुझे लगता है कि समस्या यह है कि आप को तुरंत चालू करने के लिए alloc-init का उपयोग कर रहे हैं। यह स्टोरीबोर्ड से NewsViewController नहीं बनाता है। स्टोरीबोर्ड से तुरंत आपको [UIStoryboard instantiateViewControllerWithIdentifier:(NSString *)identifier] का उपयोग करना होगा।

हालांकि, मुझे लगता है कि आसान तरीका है अपने didSelectRowAtIndexPath में

[self performSegueWithIdentifier:@"showNews" sender:indexPath] 

कॉल करने के लिए है। आपको अपना prepareForSegue... थोड़ा बदलना होगा।

- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender { 
    NSIndexPath *indexPath = (NSIndexPath *)sender; 

    if ([[segue identifier] isEqualToString:@"showNews"]) { 
     NewsViewController *newsViewController = [segue destinationViewController]; 
     News *news = (News*)[self.fetchedResultsController objectAtIndexPath:indexPath]; 
     newsViewController.news = news; 
    } 
} 
+0

समाधान के लिए धन्यवाद! – dhrm

+0

'सुपर' कॉल की आवश्यकता क्यों नहीं है? –

+1

आपका मतलब है '[सुपर तैयार करने के लिए: ...] '? मुझे लगता है कि आपको ऐसा करने की ज़रूरत नहीं है कि बी/सी 'UIViewController' का कार्यान्वयन कुछ भी नहीं करता है। यदि आप अपने 'UIViewController' उप-वर्ग को उप-वर्गीकृत कर रहे हैं और इसके' readyForSegue' कार्यान्वयन का भी उपयोग करना चाहते हैं, तो आपको उस समय 'सुपर' को कॉल करना होगा। – barley