2013-04-29 76 views
-2

LoginController尝试简单登录尝试 - 如果其成功,则调用setEmail,leftcontroller无法隐藏以编程方式创建的UIButton?

所有我需要做的,当setEmail被调用是隐藏btnLogin并显示buttonUser并没有什么我尝试工作。 NSLog被调用,EventsController加载使setEmail正在工作 - 它不会隐藏和显示按钮。

leftcontroller.h

@interface LeftController : UIViewController <UIApplicationDelegate> 
{ 
    IBOutlet UIButton *btnLogin; 
    IBOutlet UIButton *buttonUser; 
    NSString *setEmail; 
} 
@property (nonatomic,strong) IBOutlet UIButton *btnLogin; 
@property (nonatomic,strong) IBOutlet UIButton *buttonUser; 

@property(nonatomic,strong) UITableView *tableView; 
@property(nonatomic) NSString *Email; 

//-(void) setEmail : (NSString *) Email; 

@end 

leftcontroller.m

- (void) setEmail : (NSString *) Email{ 
    [buttonUser setTitle:Email forState:UIControlStateNormal]; 
    //btnLogin.hidden = YES; 
    //buttonUser.hidden = NO; 
    [btnLogin setHidden:YES]; 
    [buttonUser setHidden:NO]; 

    NSLog(@"Set Email Called"); 
    NSLog(@"email: %@", Email); 

    DDMenuController *menuController = (DDMenuController*)((AppDelegate*)[[UIApplication sharedApplication] delegate]).menuController; 
    EventsViewController *controller = [[EventsViewController alloc] init]; 
    UINavigationController *navController = [[UINavigationController alloc] initWithRootViewController:controller]; 

     [menuController setRootController:navController animated:YES]; 
} 

-(void)viewDidLoad { 
    [super viewDidLoad]; 

    self.view.backgroundColor = HEXCOLOR(0x000000); 

    btnLogin = [UIButton buttonWithType:UIButtonTypeRoundedRect]; 
    btnLogin.frame = CGRectMake(0, 0, 180.f, 48); 
    [btnLogin setTitle:@"Login" forState:UIControlStateNormal]; 
    [btnLogin addTarget:self action:@selector(LoginPressed) 
     forControlEvents:UIControlEventTouchUpInside]; 
    btnLogin.tag=1; 

    btnLogin.contentHorizontalAlignment = UIControlContentHorizontalAlignmentLeft; 
    [btnLogin setTitleColor: [UIColor whiteColor] forState:UIControlStateNormal]; 
    btnLogin.contentEdgeInsets = UIEdgeInsetsMake(0, 10, 0, 0); 

    UIImage *btnImage = [UIImage imageNamed:@"nav_top.png"]; 
    [btnLogin setBackgroundImage:btnImage forState:UIControlStateNormal]; 
    [self.view addSubview:btnLogin]; 

    buttonUser = [UIButton buttonWithType:UIButtonTypeRoundedRect]; 
    buttonUser.frame = CGRectMake(0, 0, 180.f, 48); 
    //[buttonUser setTitle:_Email forState:UIControlStateNormal]; 
    [buttonUser addTarget:self action:@selector(EmailPressed) 
     forControlEvents:UIControlEventTouchUpInside]; 
    buttonUser.contentHorizontalAlignment = UIControlContentHorizontalAlignmentLeft; 
    [buttonUser setTitleColor: [UIColor whiteColor] forState:UIControlStateNormal]; 
    buttonUser.contentEdgeInsets = UIEdgeInsetsMake(0, 10, 0, 0); 

    UIImage *btnImage1 = [UIImage imageNamed:@"nav_top.png"]; 
    [buttonUser setBackgroundImage:btnImage1 forState:UIControlStateNormal]; 
    [self.view addSubview:buttonUser]; 
    buttonUser.hidden = YES; 
} 
+0

按钮是在XIB中定义的插座还是代码中的变量或两者兼而有之? – Wain 2013-04-29 16:49:53

+0

no xib - 我不认为我需要IBOutlet - 只是尝试不同的事情,试图让它工作 – lsiunsuex 2013-04-29 17:03:42

+0

http://stackoverflow.com/questions/4498400/cant-programmatically-hide-uibutton-created-with -ib?rq = 1 – matt 2013-04-29 17:13:32

回答

4

此行是犯罪嫌疑人:

btnLogin = [UIButton buttonWithType:UIButtonTypeRoundedRect]; 
// ... 
[self.view addSubview:btnLogin]; 

如果要创建btnLogin并将其添加到self.view自己,在代码中,然后为什么是这样的n outlet?

@property (nonatomic,strong) IBOutlet UIButton *btnLogin; 

一个出口的东西,已经存在,并且在你的笔尖实例。因此,在我看来,你可能有两个对象,其中一个对象将你的引用擦除掉。而另一个按钮也一样。

0

你没有设置你的财产,替换:

btnLogin = [UIButton buttonWithType:UIButtonTypeRoundedRect]; 

有:

self.btnLogin = [UIButton buttonWithType:UIButtonTypeRoundedRect]; 

,并定义像你的财产:

@property (nonatomic,strong) UIButton *btnLogin; 

执行相同的buttonUser

+2

如果按钮是在代码中创建的,为什么要将该属性标记为IBOutlet? – rmaddy 2013-04-29 16:59:33

+0

我的不好意思是要指出它不应该被标记为出口,但忘记删除,感谢捕捉。 – 2013-04-30 15:57:01

0

设置你的按钮的hidden后,您立即说

[menuController setRootController:navController animated:YES];} 

这表明,你正在改变接口。但是如果你正在改变界面,你真的可以告诉你的按钮是否改变了吗?我不知道你在这里做什么,但也许你的按钮不再在界面中。也许你在界面上看到的是不同的按钮组。

+0

左侧控制器(这是按钮所在的位置)是https://github.com/devindoty/DDMenuController的一部分 - 导航栏按钮会拉出菜单,单击登录(然后登录)并加载事件控制器 - 左侧控制器永远不会被卸载 - 它只是隐藏了 – lsiunsuex 2013-04-29 17:14:01

+0

这些按钮位于左侧控制器中。如果左侧控制器隐藏,你怎么知道按钮没有改变?你不能再看到它们了。 – matt 2013-04-29 17:15:31

+0

认为facebook ios应用程序 - 菜单拉出导航栏按钮 - 所以当我登录后,我再次击中该导航栏按钮,登录按钮hasen't变得隐藏 – lsiunsuex 2013-04-29 17:18:57