2011-04-20 11 views
7

मैं वर्तमान में अपना पहला आईफोन ऐप लिख रहा हूं, लेकिन मुझे कोई समस्या आई है। मेरे पास एक दृश्य है जिसमें UITableView शामिल है। यह पहली बार है कि मैंने इसका प्रयास किया है, और यह वह व्यवहार है जिसे मैं प्राप्त करने की कोशिश कर रहा हूं:'UITableView' में पंक्ति का चयन करते समय एक नया दृश्य कॉल करना

जब उपयोगकर्ता पंक्तियों में से एक का चयन करता है, तो मैं इसे एक नया दृश्य कहूंगा, जिससे उपयोगकर्ता को ले जाया जा सकेगा एक अलग पृष्ठ जो उन्होंने चुना है उसके संदर्भ में जानकारी प्रदर्शित करता है।

मेरे पास वर्तमान में है, इसलिए जब उपयोगकर्ता एक पंक्ति का चयन करता है तो यह एक ही दृश्य में यूआईएलर्ट दिखाता है, लेकिन यह मेरी आवश्यकताओं के अनुरूप नहीं है। मैंने इंटरफ़ेस बिल्डर के माध्यम से UITableView सेट अप किया है, और इसे सेट करने के लिए मेरे .m फ़ाइल में निम्न कोड इनपुट किया है।

- (NSInteger)tableView:(UITableView *)tableView 
numberOfRowsInSection:(NSInteger)section { 
    //return the value 
    return 10; 
} 

//now we define the cells. 
- (UITableViewCell *)tableView:(UITableView *)tableView 
     cellForRowAtIndexPath:(NSIndexPath *)indexPath { 

    // Identifier for retrieving reusable cells. 
    static NSString *cellIdentifier = @"MyCellIdentifier"; 

    // Attempt to request the reusable cell. 
    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:cellIdentifier]; 

    // No cell available - create one 
    if(cell == nil) { 
     cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault 
             reuseIdentifier:cellIdentifier]; 
    } 

    // Set the text of the cell to the row index. 
    cell.textLabel.text = [NSString stringWithFormat:@"iPad %d", indexPath.row]; 

    return cell; 
} 

यह दस पंक्तियों की एक सूची बनाता है। निम्नलिखित कोड मुझे टैप करते समय मेरा यूआईएलर्ट देते हैं, हालांकि, मैं इसे हटाना चाहता हूं और इसे अपनी पसंद का नया दृश्य कहूंगा;

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

    // Show an alert with the index selected. 
    UIAlertView *alert = [[UIAlertView alloc] 
          initWithTitle:@"iPad Selected"       
          message:[NSString stringWithFormat:@"iPad %d", indexPath.row]      
          delegate:self  
          cancelButtonTitle:@"OK"   
          otherButtonTitles:nil]; 
    [alert show]; 
    [alert release]; 

} 

क्या कोई इस अंतिम कोड के साथ मदद कर सकता है? जिस दृश्य को मैं कॉल करना चाहता हूं उसे 'प्रोटीन व्यू' कहा जाता है।

उत्तर

3

ठीक है, हमें क्या करना है UITableView विधियों में से एक का उपयोग करना जो हमारे लिए पहले से ही आसानी से उपलब्ध है। हम निम्नलिखित करेंगे।

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

ProteinView *detailViewController = [[ProteinView alloc] initWithNibName:@"ProteinView" bundle:nil]; 

     // It is here we'd pass information from the currently selected UITableViewCell to the ProteinView. 
     // An example of this is the following. 

     // I would do it like this, but others would differ slightly. 
     NSString *titleString = [[[NSString alloc] initWithFormat:@"iPad %d",indexPath.row] autorelease]; 

     // title is an object of detailViewController (ProteinView). In my own instances, I have always made a NSString which in viewDiDLoad is made the self.navigationBar.title string. Look below for what my ProteinView.m and .h would look like. 
     detailViewController.stringTitle = titleString; 
     // ... 
     // Pass the selected object to the new view controller. 
     [self.navigationController pushViewController:detailViewController animated:YES]; 
     [detailViewController release]; 
} 

संपादित

// -------- ProteinView.m -------- // 

- (void)viewDidLoad { 

[super viewDidLoad]; 
// Do any additional setup after loading the view from its nib. 

// Here we set the navigationItem.title to the stringTitle. stringTitle is declared in the .h. Think of it as a global scope variable. It is also propertised in the .h and then synthesized in the .m of ProteinView. 
self.navigationItem.title = stringTitle; 
} 

मैं इस संकलित नहीं किया है, इसलिए मैं अगर यह पूरी तरह से काम करेंगे पता नहीं है। लेकिन यह निश्चित रूप से ऐसा करने का सबसे तेज़ और सबसे आसान तरीका है!

+0

यह एक सही उत्तर है, लेकिन (ए) यह अनुमान लगाता है कि ओपी नेविगेशन व्यू कंट्रोलर का उपयोग कर रहा है, और (बी) वास्तव में शामिल विभिन्न हिस्सों को नहीं समझाता है - नए व्यू कंट्रोलर, एक्सआईबी, और 'शीर्षक विशेषता शायद थोड़ा सा विस्तृत करें? – Tim

+0

मैंने उस उदाहरण का उपयोग किया है, संकलित आदि, UIToolBar ठीक प्रदर्शित करता है। लेकिन जब एक पंक्ति टैप की जाती है, तो ऐप क्रैश हो जाता है। #Dismayed! –

+0

ऐसा लगता है कि उस पर आधारित चेतावनी देना [NSString withFormat: कोड का टुकड़ा। स्क्रीनशॉट देखें यदि कोई अभी भी इसे पढ़ रहा है :-) - http://d.pr/AKNb –

1

आप इस

YourViewController2 *viewController2 = [[YourViewController2 alloc]initWithNibName:@"YourViewController2" bundle:nil]; 
[self presentModalViewController:viewController2 animated:YES]; 

यदि आप एक दृश्य की तुलना में अधिक है पेश करने के लिए की तरह देखने रुप से उपस्थित हो सकते हैं? यदि ऐसा है तो आपको नामों के साथ एक सरणी बनाने की आवश्यकता होगी, इसे तालिकादृश्य में पास करें और फिर indexPath.row पर आधारित पंक्ति के लिए सही दृश्य प्रस्तुत करें।

0

आपको अपना मेनविंडो.एक्सबी खोलना होगा और इसमें एक नेविगेशन नियंत्रक जोड़ना होगा। फिर अपने ऐप प्रतिनिधि को एक नेविगेशन नियंत्रक आउटलेट जोड़ें और उन्हें कनेक्ट करें। फिर आपको नेविगेशन नियंत्रक के दृश्य को अपनी मुख्य विंडो के दृश्य के रूप में सेट करने की आवश्यकता होगी।

आप फ़ाइल -> नई कमांड से एक नया UITableViewController सबक्लास बनाकर, किसी भी आईफोन ऐप को आसानी से आसानी से एक टेबल व्यू जोड़ सकते हैं।

भले ही आप इस मार्ग पर जाएं, मैं सुझाव देता हूं कि एक टेम्पलेट/धोखा-चादर के रूप में उपयोग करने के लिए एक नई नेविगेशन-आधारित परियोजना तैयार करें। UITableView – Creating a Simple Table View

+0

माइक, माइक, माइक - यह सब अद्भुत लगता है, हालांकि, आप जानते हैं कि मुझे सचमुच पता नहीं है कि आप हाहा के बारे में क्या बात कर रहे हैं। मैंने बस अपना ट्वीट पढ़ा है, इसलिए यदि आपको समय मिलता है तो क्या आप एक छोटी उदाहरण परियोजना को हल कर सकते हैं? बीमार मेल अब आप –

+0

लॉल, मुझे पता है कि यह दर्द का थोड़ा सा है लेकिन मैंने पोस्ट किए गए ट्यूटोरियल के साथ एक नई परियोजना शुरू की है। मुझे पता है कि आपको लगता है कि यह करना आसान है, लेकिन मौजूदा परियोजना में अतिरिक्त नेविगेशन नियंत्रकों को जोड़ने की कोशिश करना मुश्किल हो सकता है। यदि आप ट्यूटोरियल (part1 और 2) को पूरा करते हैं, तो आपके पास अपनी इच्छित चीज़ों की एक रूपरेखा होगी, फिर आप अपनी परियोजना में जो कुछ भी जानते हैं उसे जोड़ सकते हैं, या नमूना ट्यूटोरियल – d4ndym1k3

+0

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

संबंधित मुद्दे