1

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

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

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

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

4

3 回答 3

0

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

于 2013-06-28T03:40:02.770 回答
0

要么secondViewController作为 的父视图控制器FirstViewController,在这种情况下,您可以访问父视图控制器的所有属性,或者NSNotificationCenter用于将通知从第一个视图控制器发送到第二个。

父视图控制器.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";
}
于 2013-06-28T03:51:21.577 回答
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

或者

第二视图控制器.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

第二视图控制器.m

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

第一视图控制器.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
于 2013-06-28T03:52:00.737 回答