更改另一个UIViewController的属性值

时间:2013-06-28 03:02:12

标签: ios objective-c

我是iOS开发的新手,我有点难过。如果有人可以帮助我,那就太好了。

我有一个带有一堆按钮的UIViewController。这些按钮应该为第二个UIViewcontroller设置一个值,具体取决于你按哪个。例如,第二个UIViewController具有类似NSString的属性。当我在第一个视图控制器中按下一个按钮(比如说“Banana”)时,我希望第二个UIViewController的NSString分配给它“Banana”。或者当我按下名为Apple的按钮时,NSString现在被分配为“Apple”。

在UI中,用户将访问第一个控制器以选择按钮,然后再访问第二个控制器,该控制器已经具有用户从第一个控制器按下的值,准备进行操作。这两个控制器没有通过segue连接。

我希望这很清楚。我只想知道第一个UIViewController中的语法,将值分配给另一个UIViewController属性,如NSString。我真的很感激任何帮助。

3 个答案:

答案 0 :(得分:0)

如果第一个UIViewController没有对第二个UIViewController的引用,那么你可以使用由第一个UIViewController更新并由第二个UIViewController读取的单例模型对象。这是创建单身人士的一个很好的参考:http://www.cocoawithlove.com/2008/11/singletons-appdelegates-and-top-level.html

答案 1 :(得分:0)

secondViewController作为FirstViewController的父视图控制器,在这种情况下,您可以访问父视图控制器的所有属性或使用NSNotificationCenter从First View Contrlller发送通知第二

<强> ParentViewController.h

#import <UIKit/UIKit.h>

@interface ParentViewController : UIViewController

@property (nonatomic,strong) NSString *mytextView;

@end

<强> ChildViewController.h

#import "ParentViewController.h"

@interface ChildViewController : ParentViewController

@end

<强> ChildViewController.m

#import "ChildViewController.h"

@interface ChildViewController ()

@end

@implementation ChildViewController
- (void)viewDidLoad
{
    [super viewDidLoad];
    self.mytextView = @"Value";
}

答案 2 :(得分:0)

您可以让SecondViewController成为FirstViewController的属性。这样FirstViewController可以引用它。

已编辑以回答评论中的问题

属性示例:

@interface FirstViewController()
property (strong, nonatomic) SecondViewController *secondViewController;
@end

@implementation FirstViewController

-(id)init
{
    if (self = [super init]) {
        self.secondViewController = [[SecondViewController alloc] init];
    }
    return self;
}

-(void)didPressBanana
{
    [self.secondViewController bananaWasPressed];

    // OR

    self.secondViewController.fruit = @"banana";
}

@end

SecondViewController.h

@interface SecondViewController

@property (strong, nonatomic) NSString *fruit;

@end

SecondViewController.m

-(void)bananaWasPressed
{
    self.fruit = @"banana";
}

或者您可以使用协议,如果您希望以其他方式进行并让SecondViewController与FirstViewController进行通信。

协议示例:

SecondViewController.h

@protocol SecondViewControllerDelegate
-(void)didPressBanana;
@end

@interface SecondViewController : UIViewController
    @property (nonatomic, unsafe_unretained) id<SecondViewControllerDelegate> delegate;
@end

SecondViewController.m

-(void)didPressBanana 
{
    [self.delegate didPressBanana];
}

FirstViewController.m

@interface FirstViewController()
@property (nonatomic, strong) SecondViewController *secondViewController;
@end

@implementation FirstViewController <SecondViewControllerDelegate>

-(id)init
{
    if (self = [super init]) {
        self.secondViewController = [[SecondViewController alloc] init];
    }
    return self;
}
-(void)viewDidLoad
{
    [self.secondViewController setDelegate:self];
}

// delegate method conforms to SecondViewControllerDelegate protocol
-(void)didPressBanana
{
    // do something 
}

@end