Передача значений из второго представления в первый просмотр в Xcode - PullRequest
0 голосов
/ 14 марта 2012

Я застрял здесь.

У меня есть NSString в Appdelegate.И у меня есть два вида, которые называются firstview, second view. В первом виде у меня есть метка и я устанавливаю текст из stringvariable, который находится в Appdelegate. Когда я нажимаю на кнопку в первом виде, он переходит во второй вид (добавляется второй вид в первыйпросмотреть как подпредставление). Во втором представлении у меня есть кнопка «назад». Когда я нажимаю кнопку «Назад», отображается первый вид (Здесь я устанавливаю значение, которое находится в appdelegate. И затем использовал это [self.view removeFromSuperview]).Проблема в первом представлении появляется, но значение метки не обновляется. Может ли кто-нибудь сказать мне, как обновить Labeltext. Пожалуйста, скажите мне.

Appdelegate.h

#import <UIKit/UIKit.h>

@class FirstView;

@interface AppDelegate : UIResponder <UIApplicationDelegate>
{
    NSString *str1;
}

@property (nonatomic,retain)  NSString *str1;

@property (strong, nonatomic) UIWindow *window;

@property (strong, nonatomic) ViewController *viewController;

@end

Appdelegate.m

#import "AppDelegate.h"

#import "FirstView.h"

@implementation AppDelegate

@synthesize window = _window;
@synthesize viewController = _viewController;
@synthesize str1;

- (void)dealloc
{
    [_window release];
    [_viewController release];
    [super dealloc];
}

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
    self.window = [[[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]] autorelease];
    // Override point for customization after application launch.
    self.viewController = [[[FirsView alloc] initWithNibName:@"FirstView" bundle:nil] autorelease];

    self.str1 = @"view1";

    self.window.rootViewController = self.viewController;
    [self.window makeKeyAndVisible];


    return YES;
}

FirstView.h

#import <UIKit/UIKit.h>
#import "secondView.h"

@interface FirstView : UIViewController
{
    IBOutlet UILabel *btn;
    secondView *cont;
}

-(IBAction)gotoView2:(id)sender;

@end

FirstView.m

#import "FirstView.h"

-(IBAction)gotoView2:(id)sender
{
    cont = [[secondView alloc] initWithNibName:@"secondView" bundle:nil];
    [self.view addSubview:cont.view];
}

#pragma mark - View lifecycle

- (void)viewDidLoad
{
    [super viewDidLoad];

    AppDelegate *del = [[UIApplication sharedApplication] delegate];

    [btn setTitle:del.str1];

}

**SecondView.h**

#import <UIKit/UIKit.h>

@interface SecondView : UIViewController
{

}

-(IBAction)goBack:(id)sender;

@end

SecondView

#import "SecondView.h"
#import "AppDelegate.h"

@implementation SecondView

-(IBAction)gotoView1:(id)sender
{

    AppDelegate *del = [[UIApplication sharedApplication] delegate];
    [del setStr1:@"Home"];

    [self.view removeFromSuperView];
}

1 Ответ

4 голосов
/ 14 марта 2012

Существует шаблон, как делать такие вещи.Вы должны определить протокол следующим образом:

@protocol FirstViewDelegate <NSObject>

- (void)didDismissSecondView;

@end

Ваше первое представление должно соответствовать этому протоколу:

@interface FirstView: UIViewController <FirstViewDelegate> {
...

в его реализации добавить функцию didDismissSecondView:

- (void) didDismissSecondView
{
    AppDelegate *del = [[UIApplication sharedApplication] delegate];

    [btn setTitle:del.str1];
}

Ваше второе представление должно иметь свойство

@interface SecondView : UIViewController
{
     id<FirstViewDeledate> delegate;
}
@property (nonatomic, retain) id<FirstViewDeledate> delegate;

Когда вы отображаете второе представление из первого представления, установите его делегата на self первого представления в вашей функции:

-(IBAction)gotoView2:(id)sender
{
    SecondView *aView = [[SecondView alloc] init] // or whatever
    ...//other initialization code
    aView.delegate = self;
    ... // show it

}

и, прежде чем отклонить второй взгляд:

-(IBAction)gotoView1:(id)sender
{

    AppDelegate *del = [[UIApplication sharedApplication] delegate];
    [del setStr1:@"Home"];

    [self.delegate didDismissSecondView];

    [self.view removeFromSuperView];
}

И все готово.Немного долго, но работает.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...