SORU
1 HAZİRAN 2011, ÇARŞAMBA


VE geri veri aktarmak dismissModalViewController

İki görünümü denetleyicileri varfirstViewControllervesecondViewController. Bu kod benim secondViewController (ayrıca bir dize taşıyorum) geçmek için kullanıyorum:

secondViewController *second = [[secondViewController alloc] initWithNibName:nil bundle:nil];

second.myString = @"This text is passed from firstViewController!";

second.modalTransitionStyle = UIModalTransitionStyleCrossDissolve;

[self presentModalViewController:second animated:YES];

[second release];

Ben o zaman secondViewController bu kod arka firstViewController geçiş yapmak için kullanın:

[self dismissModalViewControllerAnimated:YES];

Bunların hepsi gayet iyi çalışıyor. Benim soru, nasıl firstViewController için veri aktarmak istiyorsunuz? Bu secondViewController gelen firstViewController farklı bir dize geçmek istiyorum.

Ben herhangi bir yardım için teşekkür ederiz. Teşekkürler çocuklar.

CEVAP
1 HAZİRAN 2011, ÇARŞAMBA


Temsilci protokol kullanmanız gerekir. bunu yapmak için:

Senin secondViewController başlığında bir protokol dosyası bildirin. Bu gibi görünmelidir:

#import <UIKit/UIKit.h>

@protocol SecondDelegate <NSObject>
-(void) secondViewControllerDismissed:(NSString *)stringForFirst
@end


@interface SecondViewController : UIViewController
{
    id                              myDelegate; 
}

@property (nonatomic, assign) id<SecondDelegate>    myDelegate;

Bu arayüze sentezlemek için unutma .m dosya:

@synthesize myDelegate;

Senin firstViewController başlık dosyası bunu yaparak SecondDelegate protokolü olun

#import "SecondViewController.h"

@interface FirstViewController:UIViewController <SecondDelegate>

Şimdi firstViewController olarak başlatılamadı secondViewController zaman aşağıdakileri yapmanız gerekir:

SecondViewController *second = [[SecondViewController alloc] initWithNibName:nil bundle:nil];

second.myString = @"This text is passed from firstViewController!";

second.myDelegate = self;

second.modalTransitionStyle = UIModalTransitionStyleCrossDissolve;

[self presentModalViewController:second animated:YES];

[second release];

Son olarak, içinde .m secondViewControllerDismissed için ilk görünüm SecondDelegate yöntemi denetleyicisi uygulamak için dosya:

- (void)secondViewControllerDismissed:(NSString *)stringForFirst
{
    NSString *thisIsTheDesiredString = stringForFirst; //And there you have it.....
}

Şimdi ikinci görünüm denetleyicisi kapatmak için yöntemi ilk görünümü denetleyicisi hayata çağırmak istiyorum. Bu kısmı basit. Tek yapmanız gereken, ikinci görünümü denetleyicisi, önce bazı kod görevden ekleyin:

if([self.myDelegate respondsToSelector:@selector(secondViewControllerDismissed:)])
{
    [self.myDelegate secondViewControllerDismissed:@"THIS IS THE STRING TO SEND!!!"];
}
[self dismissModalViewControllerAnimated:YES];

Temsilci protokolleri, son DERECE, son DERECE yararlı, son DERECE. Sen onlara:) daha yakından tanımak için

NSNotifications bunu yapmak için başka bir yol vardır, ama en iyi yöntem olarak, birden fazla viewControllers veya nesneler arasında iletişim için istediğim zaman onu kullanmayı tercih ederim. Burada eğer NSNotifications kullanarak merak ediyorsanız yayınlanan bir önceki cevap: Firing events accross multiple viewcontrollers from a thread in the appdelegate

DÜZENLEME:

Eğer birden fazla argüman geçmek istiyorsanız, bu kodu bu şekilde daha önce görevden görünüyor:

if([self.myDelegate respondsToSelector:@selector(secondViewControllerDismissed:argument2:argument3:)])
{
    [self.myDelegate secondViewControllerDismissed:@"THIS IS THE STRING TO SEND!!!" argument2:someObject argument3:anotherObject];
}
[self dismissModalViewControllerAnimated:YES];

Bu firstViewController içinde SecondDelegate yöntemi uygulamanız, şimdi sorun var demektir:

- (void) secondViewControllerDismissed:(NSString*)stringForFirst argument2:(NSObject*)inObject1 argument3:(NSObject*)inObject2
{
    NSString thisIsTheDesiredString = stringForFirst;
    NSObject desiredObject1 = inObject1;
    //....and so on
}

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • Rockstar Games

    Rockstar Gam

    17 ŞUBAT 2006
  • Videogamerz | Call of Duty

    Videogamerz

    5 NİSAN 2012
  • VitalyzdTv

    VitalyzdTv

    7 AĞUSTOS 2011