2012-12-31 10 views
5

संभव डुप्लिकेट:
dismissModalViewController AND pass data backपैरेंट व्यू कंट्रोलर के लिए मूल्य कैसे पास करें?

मैं ios विकास के लिए नया हूँ और इस समस्या पर अटक:

मैं स्टोरीबोर्डिंग उपयोग कर रहा हूँ और एक नेविगेशन नियंत्रक, vcA है, इसमें TableView के साथ जो MutableArray से कुछ डेटा दिखाता है (जिसे उसी श्रेणी के viewdidload में प्रारंभ किया गया है)। किसी भी सेल का चयन करने के बाद, दूसरा दृश्य नियंत्रक, vcB, इसमें TextField और "सूची में जोड़ें" नामक एक बटन दिखाया गया है।

मुझे क्या चाहिए कि जब मैं TextField में कुछ टेक्स्ट दर्ज करता हूं और "सूची में जोड़ें" बटन दबाता हूं तो पाठ को पिछले दृश्य की सरणी में जोड़ा जाना चाहिए (जो TableView में दिखाया गया है) और जब मैं टैप करता हूं vcB की नेविगेशन बार पर "बैक" बटन, vcA को इसमें नई प्रविष्टि (सूची के शीर्ष पर) के साथ अद्यतन TableView दिखाना चाहिए। असल में मैं vcB के TextField से vcA की सरणी में टेक्स्ट जोड़ना चाहता हूं और बैक बटन पर क्लिक करने के बाद नया सरणी दिखा सकता हूं।

मैंने इस मुद्दे के बारे में बहुत कुछ खोजा है और ऐसा लगता है कि प्रतिनिधि और प्रोटोकॉल वांछित परिणाम प्राप्त करने का तरीका है लेकिन मुझे प्रतिनिधिमंडल को समझने में परेशानी हो रही है।

दूसरे दृश्य नियंत्रकों ज फ़ाइल में:

+2

[आपने क्या प्रयास किया है?] (Http://mattgemmell.com/2008/12/08/what-have-you-tried/) – Foggzie

+2

यह पूछा गया है और गिनने के लिए कई बार जवाब दिया गया है। http://stackoverflow.com/a/6204427/1271826 – Rob

उत्तर

13

मैं इस उदाहरण में मोडल के रूप में खुद को पेश करने दूसरे दृश्य नियंत्रक है गुण के संश्लेषण के लिए सुनिश्चित करें कि

@protocol SecondViewControllerDelegate <NSObject> 
- (void)addItemViewController:(id)controller didFinishEnteringItem:(NSString *)item; 
@end 

@interface SecondPageViewController : UIViewController <UITextViewDelegate> 
{ 
    NSString *previouslyTypedInformation; 
} 

@property (weak, nonatomic) IBOutlet UITextView *textView; 
@property (nonatomic) NSString *previouslyTypedInformation; 
@property (nonatomic, weak) id <SecondViewControllerDelegate> delegate; 

दूसरे दृश्य नियंत्रकों मीटर फ़ाइल में और तो इस जोड़ें: पहला दृश्य नियंत्रकों ज फ़ाइल में फिर

- (IBAction)done:(id)sender 
{ 
    NSString *itemToPassBack = self.textView.text; 
    NSLog(@"returning: %@",itemToPassBack); 
    [self.delegate addItemViewController:self didFinishEnteringItem:itemToPassBack]; 
    //dismiss modal view controller here 
} 

प्रतिनिधि के रूप में सेट:

@interface FirstPageViewController: UIViewController <SecondViewControllerDelegate> 
@property (nonatomic) NSString *returnedItem; 

तब पहली बार देखने नियंत्रक के मीटर फ़ाइल synthesize में और पद्धति जोड़ें:

- (void)addItemViewController:(SecondPageViewController *)controller didFinishEnteringItem: (NSString *)item 
{ 
    //using delegate method, get data back from second page view controller and set it to property declared in here 
    NSLog(@"This was returned from secondPageViewController: %@",item); 
    self.returnedItem=item; 

    //add item to array here and call reload 
} 

अब तुम क्या वापस आ गया था के पाठ है! आप पहली बार देखने नियंत्रक के viewDidLoad में अपने सरणी स्ट्रिंग जोड़ सकते हैं और फोन

[self.tableView reloadData]; 

और यह काम करना चाहिए कर सकते हैं।

+1

बस एक अतिरिक्त, जहां आप अपने पहले दृश्य में अपना दूसरा व्यू कंट्रोलर प्रारंभ करते हैं, करें: secondView.myDelegate = self; – hyd00

+0

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

+0

धन्यवाद ... बहुत ज्यादा .. –

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