2012-04-23 17 views
6

के साथ UITableViewController के लिए RowSelected को कार्यान्वित करने के लिए कैसे मैं एक मोनोटच समाधान के लिए मूल उद्देश्य-सी ऐप पोर्ट कर रहा हूं।मोनो टच स्टेटिक सेल

मेरे पास स्टोरीबोर्ड में कुछ स्टैटिक टेबल सेल के साथ एक टेबलव्यू है।

निम्नलिखित उद्देश्य-सी कोड का उपयोग करना एक मेज

- (void) tableView:(UITableView *) aTableView didSelectRowAtIndexPath:(NSIndexPath *) indexPath 
{  // remove the row highlight 
    [aTableView deselectRowAtIndexPath:indexPath animated:YES]; 

    switch(indexPath.row) { 
     case 0: [self callWebsite]; break; 
     case 1: [self sendEmail]; break; 
     case 2: [self makePhoneCall]; break; 
    } 

    return; 
} 

अब मैं MonoTouch में भी ऐसा ही करना चाहते हैं से चयन किया, लेकिन बाहर नहीं मिल सकता है कि कैसे और सभी उदाहरण मैं नेट पर मिल , डेटासोर्स और UITableViewDelegate का उपयोग कर रहे हैं।

लेकिन उस दृष्टिकोण का उपयोग करते समय, मेरी "स्टेटिक" कोशिकाओं को हटा दिया जाता है, प्रतिस्थापित किया जाता है।

यह मैं क्या कोशिश कर रहा हूँ

public partial class ContactViewController : UITableViewController 
{ 
    public ContactViewController (IntPtr handle) : base (handle) 
    { 
     this.TableView.Delegate = new CustomTableViewDelegate(); 
    } 
} 

public class CustomTableViewDelegate : UITableViewDelegate 
{ 
    public override void RowSelected (UITableView tableView, NSIndexPath indexPath) 
    { 
     // Remove the row highlight 
     RowDeselected(tableView, indexPath); 

     /* 
      // Is this section our "button" section? 
      switch(indexPath.row) { 
       case 0: [self callWebsite]; break; 
       case 1: [self sendEmail]; break; 
       case 2: [self makePhoneCall]; break; 
      } 
     */ 

     Console.WriteLine("Do something meaningfull."); 
    } 
} 

किसी ने कोई सुझाव है?

+0

मुझे नहीं पता काफी पालन करें, आपकी कोशिकाओं को कैसे हटाया जाता है? आपके द्वारा चिपकाया गया कोड सेल के चयन के दौरान कार्रवाई के लिए है, और आपने कुछ टिप्पणी की है, आपने टिप्पणी क्यों की? –

+0

टिप्पणी कोड, मेरे उद्देश्य-सी कोड का एक प्रति पेस्ट है, क्योंकि मैं इसे सी # में अनुवाद कर रहा था। इस मुद्दे के लिए कोई महत्व नहीं है। मुझे यकीन नहीं है कि कोशिकाओं को क्यों हटाया जाता है। मुझे लगता है कि ऐसा इसलिए है क्योंकि मेरे पास कोड 'संख्याऑफ्रोसइनसेक्शन' और 'cellForRowAtIndexPath' विधि का कोई कार्यान्वयन नहीं है जिसका उपयोग कोड से तालिकाओं बनाते समय किया जाता है। स्थिर रूप से नहीं ... "मुझे लगता है ..." – user1346056

उत्तर

7

मुझे लगता है कि आपको यह काम करने के लिए WeakDelegate का उपयोग करने का प्रयास करना चाहिए।

अपने नियंत्रक तार ऊपर तो जैसे विधि में:

[Export("tableView:didSelectRowAtIndexPath:")] 
public void RowSelected (UITableView tableView, NSIndexPath indexPath) 
{ 
    //Your code here 
} 

फिर सेट TableView.WeakDelegate = this;

इसके साथ खेलते हैं चारों ओर, मैं अपने मानकों को बिल्कुल सही आदि नहीं हो सकता है,

+0

मैंने इसका परीक्षण किया और पाया कि वीकडिलेगेट को स्थापित करने से स्थैतिक कोशिकाओं को साफ़ किया जा सकता है। हालांकि यदि आप निर्यात विशेषता के साथ RowSelected विधि को UITableViewController के स्वामित्व में जोड़ते हैं तो आपको अपेक्षित परिणाम मिलते हैं। – holmes

+0

तो आपके द्वारा स्थापित स्थिर कक्षों को नियंत्रक को 'UITableView' के प्रतिनिधि के रूप में सेट करना होगा। आपने जो किया वह शायद मोनो टच के साथ काम करने का एकमात्र तरीका है। यह एक बात है जिसे मैं अपने आप को आजमा देना चाहता हूं, मैंने कभी भी आईओएस 5 की आवश्यकता होने के बाद स्टोरीबोर्ड का उपयोग नहीं किया है। हम उस बिंदु पर पहुंच रहे हैं जहां आईओएस 5 की आवश्यकता अब एक बड़ा सौदा नहीं हो सकती है। – jonathanpeppers

+0

वास्तव में कमजोर प्रतिनिधि असाइनमेंट कार्यों के बिना इसे लागू करना। Thx दोस्तों! मैं एक वोट दूंगा, लेकिन मेरे पास पर्याप्त प्रतिष्ठा नहीं है, whoehoeee = P – user1346056