2011-09-10 45 views
0

标签所以,我想放在我的拳头视图和地点标签中的第二个的UISwitch。 但问题是我不能联系在一起的一切..:/UISwitch在第一视图和第二

在我的第一个观点

我有

- (void)onRoff { 

    if (mySwitch1.on) { 

     test.hidden = YES; 
    } 
    else (test.hidden = NO); 

} 

但在这里我有mySwitch1一个错误,因为它在我的secondView声明.. 我不知道,如果是明确的,我要链接的标签,并在不同的视图中的开关..

谢谢!

回答

1

你的确不是很清楚。你可能想要尝试的第一件事是描述你做了什么:

  • 你的两个视图是如何实例化的?

我们假设你的两个视图是从两个不同的nib文件实例化的。

  • 什么是你想访问你的标签和开关的对象?

让我们假设这是一个视图控制器。单个视图控制器控制来自两个不同的nib文件的两个视图有点不寻常,但毕竟,为什么不呢?

在任何情况下,你可以设置所有者类你的两个笔尖文件是类视图控制器。然后在Interface Builder中,从第一个视图中,可以将标签绑定到文件所有者的出口。而在Interface Builder中,从第二视图中,可以将UISwitch绑定到文件所有者的第二出口,UISwitch类型。

但是你的方法可能是你的两个视图类中的一个?同样的想法适用:您可以将第二个nib文件中的文件所有者设置为第一个视图的视图类,然后将该开关绑定到文件所有者的出口。

但它听起来像是你的设计可能是值得努力...

编辑:您的评论后,这里更是一个有点...

的问题是,你的两个视图控制器每个控制一个不同的页面,没有理由相互了解。所以你需要一个中间人物。这可能是另一个控制器。让我们使用应用程序委托。然后,在你SwitchViewController的IBAction方法,你可以这样做:

- (IBAction) switchChangedValue:(UISwitch *) sender { 
    NSString *newLabelText = sender.isOn ? @"On" : @"Off"; 
    self.labelViewController.label.text = newLabelText; 
} 

现在怎么会每个人都知道对方的存在?首先每个视图控制器将通知中间人。下面是它的SwitchViewController:

- (void) viewDidLoad 
{ 
    [super viewDidLoad]; 
    MyAppDelegate *appDelegate = (MyAppDelegate *)[[UIApplication sharedApplication] delegate]; 
    appDelegate.switchViewController = self; 
} 

其次,应用程序的委托将需要协调的一切:

@interface MyAppDelegate : … 
@property (nonatomic, retain) SwitchViewController *switchViewController; 
@property (nonatomic, retain) LabelViewController *labelViewController; 
@end 

@implementation MyAppDelegate 

@synthesize switchViewController = _switchViewController; 
@synthesize labelViewController = _labelViewController; 

- (void) setSwitchViewController:(SwitchViewController *) newSwitchController { 
    if (newSwitchController != _switchViewController) { 
    [_switchViewController release]; 
    _switchViewController = [newSwitchController retain]; 
    _switchViewController.labelViewController = _labelViewController; 
    if (_labelViewController) 
     _labelViewController.label.text = _switchViewController.switch.isOn ? @"On" : @"Off"; 
    } 
} 

- (void) setLabelViewController:(LabelViewController *) newLabelController { 
    if (newLabelController != _labelViewController) { 
    [_labelViewController release]; 
    _labelViewController = [newLabelController retain]; 
    _labelViewController.switchViewController = _switchViewController; 
    if (_switchViewController) 
     _labelViewController.label.text = _switchViewController.switch.isOn ? @"On" : @"Off"; 
    } 
} 

我留下了一些细节,但我希望大画面清晰。

+0

感谢您的回复!首先,它是一个Tabbar应用程序。所以我想在第一个标签中放一个标签,在第二个标签中放一个开关来控制标签。 是的,有不同的笔尖文件,它是从视图控制器是。 但我真的不明白是谁把它连接在一起:/ - (void)方法是否是最好的方法? – AlexF

+0

你用void方法表示什么意思?如果你想在viewController中使用一个UIKit对象,并将它添加到你的nib文件中,你必须从viewController设置它并将它链接到nib中。 –

1

所以你已经在第二个视图中声明了你的UISwitch,并在第一个视图中声明了你的标签。所有你需要做的只是使用NSUserDefaults来达到你想要的效果。在第二个视图本身中有以下方法。不要把它带到第一个视图。

- (void)onRoff { 

    if (mySwitch1.on) { 
    [[NSUserDefaults standarduserdefaults]setObject:@"off" forKey:@"state"]; 
    [[NSUserDefaults standarduserdefaults]synchronize]; 
    } 
    else { 
    [[NSUserDefaults standarduserdefaults]setObject:@"on" forKey:@"state"]; 
    [[NSUserDefaults standarduserdefaults]synchronize]; 
    } 

} 
在第一视图中的viewWillAppear中方法

现在只需清洁香港NSUserDefaults的所述的值..

-(void)chkState{ 
NSString *tempStr=[[NSUserDefaults standarduserdefaults]objectForKey:@"state"]; 
    if([tempStr isEqualTo:@"on"]) { 
     test.hidden=YES; 
    } 
    else { 
     test.hidden=NO; 
    } 
} 

调用此方法在像这样的firstView的viewWillAppear中.... [自chkState];

希望这有助于....如果妳想要保存开关的状态太然后就在第二视图的viewWilAppear方法再次清洁香港的userdefaults值和基于

相关问题