我是iOS开发的新手,我有点难过。如果有人可以帮助我,那就太好了。
我有一个带有一堆按钮的UIViewController。这些按钮应该为第二个UIViewcontroller设置一个值,具体取决于你按哪个。例如,第二个UIViewController具有类似NSString的属性。当我在第一个视图控制器中按下一个按钮(比如说“Banana”)时,我希望第二个UIViewController的NSString分配给它“Banana”。或者当我按下名为Apple的按钮时,NSString现在被分配为“Apple”。
在UI中,用户将访问第一个控制器以选择按钮,然后再访问第二个控制器,该控制器已经具有用户从第一个控制器按下的值,准备进行操作。这两个控制器没有通过segue连接。
我希望这很清楚。我只想知道第一个UIViewController中的语法,将值分配给另一个UIViewController属性,如NSString。我真的很感激任何帮助。
答案 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