无法隐藏以编程方式创建的 UIButton? [关闭]
Posted
技术标签:
【中文标题】无法隐藏以编程方式创建的 UIButton? [关闭]【英文标题】:Can't hide programmatically created UIButton? [closed] 【发布时间】:2013-04-29 16:42:33 【问题描述】:LoginController
尝试简单的登录尝试 - 如果成功,它会在 leftcontroller
中调用 setEmail
。
当setEmail
被调用时,我需要做的就是隐藏btnLogin
并显示buttonUser
,而我没有尝试任何工作。 NSLog
s 被调用,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;
【问题讨论】:
按钮是您的 XIB 中定义的插座还是代码中的变量或两者兼而有之? 没有 xib - 我认为我不需要 IBOutlet - 只是在尝试不同的东西来让它工作 ***.com/questions/4498400/… 请注意 - 您无需使用任何合理的现代 Xcode 版本为属性声明后备存储变量。此外,拥有一个名为setEmail
的变量是个坏主意。参看。 KVO
【参考方案1】:
这条线是可疑的:
btnLogin = [UIButton buttonWithType:UIButtonTypeRoundedRect];
// ...
[self.view addSubview:btnLogin];
如果您自己在代码中创建btnLogin
并将其添加到self.view
,那么为什么它是一个出口?
@property (nonatomic,strong) IBOutlet UIButton *btnLogin;
出口是针对已经存在并在你的nib中实例化的东西。因此,在我看来,您可能有两个 btnLogin
对象,其中一个消除了您对另一个的引用。另一个按钮也是如此。
【讨论】:
【参考方案2】:设置按钮的hidden
后,您立即说
[menuController setRootController:navController animated:YES];
这表明您正在更改界面。但是如果你在改变界面,你真的能分辨出你的按钮是否改变了吗?我不知道你在这里做什么,但也许你的按钮不再出现在界面中。也许您在界面中看到的是一组不同的按钮。
【讨论】:
左控制器(按钮所在的位置)是github.com/devindoty/DDMenuController 的一部分 - 导航栏按钮拉出菜单,单击登录(然后登录)并加载事件控制器 - 左控制器永远不会被卸载 - 它只是隐藏 按钮位于左侧控制器中。如果左控制器隐藏,你怎么知道按钮没有改变?你再也看不到它们了。 想想 facebook ios 应用程序 - 单击导航栏按钮时菜单会拉出 - 所以在我点击登录后,我再次点击导航栏按钮并且登录按钮没有隐藏跨度> 【参考方案3】:你没有设置你的属性,替换:
btnLogin = [UIButton buttonWithType:UIButtonTypeRoundedRect];
与:
self.btnLogin = [UIButton buttonWithType:UIButtonTypeRoundedRect];
并定义您的属性,例如:
@property (nonatomic,strong) UIButton *btnLogin;
对buttonUser
执行相同操作。
【讨论】:
如果按钮是在代码中创建的,为什么要将属性标记为IBOutlet
?
我的错我的意思是指出它不应该被标记为插座,但忘记删除它,感谢您的关注。以上是关于无法隐藏以编程方式创建的 UIButton? [关闭]的主要内容,如果未能解决你的问题,请参考以下文章