重新加载 UITableView 时显示隐藏的 UIButton
Posted
技术标签:
【中文标题】重新加载 UITableView 时显示隐藏的 UIButton【英文标题】:Hidden UIButton showing up, when reloading UITableView 【发布时间】:2014-11-09 22:30:56 【问题描述】:我希望在 UIButtons 保持.hidden
方面获得一些帮助。我是这个网站的新手,所以请给我一点时间来最好地描述我面临的这个问题。
下面是2个UIButton的图片,在这些UIButton中间还有一个叫OnRoute。一旦按下 Acknowledged 按钮,它就会被隐藏,向其发送状态并显示 OnRoute UIButton。现在 Acknowledged 按钮已隐藏,您只会在屏幕上的 Runsheet 按钮下看到 OnRoute 按钮,您还按下该按钮会发送状态,然后自行隐藏。
一旦按下这些按钮,您就会被发送到 UITableView,此时一切正常,但是当您返回菜单屏幕时,按钮会重新出现,就好像这些按钮没有被按下一样。并且您可以一遍又一遍地重复发送状态。
这样做的目的是在按下按钮后发送作业状态,然后在服务器上的软件上显示。一旦发送了这些并且 UIButtons 隐藏了该工作编号,我希望将它们隐藏起来,直到工作从手中消失。
这是一个复杂的问题,但如果有人对此有任何想法,我将不胜感激。
//这是在ViewDidLoad中
self.onroute.hidden = YES;
NSNumber *num = [NSNumber numberWithInt:10.00];
self.acknow.hidden = YES;
if((self.consignment.cur_status_no < num) || [self.consignment.newjob isEqual:@(YES)])
self.acknow.hidden = NO;
//这是在IBAction中
- (IBAction)acknowledgebtn:(id)sender
if (self.onroute.hidden == YES)
self.acknow.hidden = NO;
self.onroute.hidden = NO;
self.acknow.hidden = YES;
//这是另一个IBAction
if (self.acknow.hidden == YES)
self.onroute.hidden = YES;
由于我是该网站的新手,因此我不会发布 UIButton 的图片,对此感到抱歉。
【问题讨论】:
当您返回菜单屏幕时,按钮应该仍然具有与您离开时相同的隐藏状态 - 如果没有发生这种情况,可能是因为您正在创建菜单的新实例控制器而不是回到旧的完成。你怎么回去? 【参考方案1】:我的建议是使用一些布尔值而不是依赖按钮隐藏属性。然后在转移到新视图时保存布尔值。然后当您返回主菜单时,检查布尔值,看看哪些应该隐藏,哪些不应该隐藏。
此外,当我命名变量时,我喜欢假装其他人会查看我的代码。因此,我不只是将 onroute 作为按钮名称,而是将其设为 onrouteBut。这也让我在回顾我的代码时更容易,因此我只需查看名称就知道每个变量的确切含义。
至于代码我不知道你是如何呈现视图的,所以我无法给出完整的答案。但我认为这会有所帮助。
在你的 .h
@property (nonatomic) BOOL onrouteBool;
@property (nonatomic) BOOL acknowBool;
//whatever other bools you need instead of using button.hidden == YES/NO
在您的 .m 中
@synthesize onrouteBool, acknowBool;
-(void)viewDidLoad
onrouteBut.hidden = YES;
onrouteBool = YES;
NSNumber *num = [NSNumber numberWithInt:10.00];
acknowBut.hidden = YES;
acknowBool = YES;
if((self.consignment.cur_status_no < num) || [self.consignment.newjob isEqual:@(YES)])
acknowBut.hidden = NO;
acknowBool = NO;
-(IBAction)acknowledgeBtn:(id)sender
if (onrouteBool == YES)
acknowBut.hidden = NO;
onrouteBut.hidden = NO;
acknowBool = NO;
onrouteBool = NO;
//this part doesn't make sense you set the button to visible and then hidden right after
acknowBut.hidden = YES;
acknowBool = YES;
-(IBAction)onrouteBtn:(id)sender
if (acknowBool == YES)
onrouteBut.hidden = YES;
onrouteBool = YES;
所以现在在你转换到下一个视图之前调用这个方法来保存布尔值
-(void)saveTheBools
//save the bools however you want before you transition the view
//one way is nsuserdefaults
[[NSUserDefaults standardUserDefaults]setBool:onrouteBool forKey:@"onrouteBool"];
[[NSUserDefaults standardUserDefaults]setBool:acknowBool forKey:@"acknowBool"];
[[NSUserDefaults standardUserDefaults]synchronize];
//how you save them
然后当您转换回主菜单时,检查布尔值以查看是否应隐藏按钮
-(void)checkTheBools
onrouteBool = [[NSUserDefaults standardUserDefaults] boolForKey:@"onrouteBool"];
acknowBool = [[NSUserDefaults standardUserDefaults] boolForKey:@"acknowBool"];
if (onrouteBool == YES)
onrouteBut.hidden = YES;
else
onrouteBut.hidden = NO;
if (acknowBool == YES)
acknowBut.hidden = YES;
else
acknowBut.hidden = NO;
//whatever else you need to hidden or make visible
这只是为了给你一些关于做什么的想法。使用你需要的东西来让它工作。我就是这样做的,我不知道这是否是最好的方法,但这是一个起点。如果没有看到你所有的代码,我真的无法给出具体的答案,因为我不知道你是如何转换视图的,你在初始化什么,保留什么等等。
希望这对您有所帮助,如果不是我的坏话。只要继续努力,你最终会找到适合你的东西。
编辑:
至于您遇到的状态问题,我真的无能为力,因为我没有要查看的代码。我认为这可能与保存变量有关,以便您可以跨类访问它们。因此,就像我向您展示了如何保存布尔值并使用它们一样,您可能必须执行类似的操作来检查状态是否已发送。
我建议使用 nsuserdefaults,因为这是最容易做的事情,但是依靠它来保存所有变量并不是最好的。您还可以查看单例、核心数据或任何允许您跨类保存所需变量的东西。你只需要找到最适合你想要做的事情的方式。
您要学习的唯一方法是有时努力奋斗,做一些研究,并尝试不同的事情,直到找到解决方案。还可以利用苹果为开发人员提供的资源。我想你将能够弄清楚这一点。祝你好运
【讨论】:
【参考方案2】:只是想更新任何遇到此问题的人,我设法使用 doubleValue 解决了这个问题。
onroute.hidden = YES;
onrouteBool = YES;
NSNumber *num1 = [NSNumber numberWithDouble:10.00];
if(([self.consignment.cur_status_no doubleValue] < [num1 doubleValue] ) )
if([self.consignment.newjob isEqual:@(NO)])
onroute.hidden = NO;
onrouteBool = NO;
acknow.hidden = YES;
acknowBool = YES;
if([self.consignment.newjob isEqual:@(YES)])
acknow.hidden = NO;
acknowBool = NO;
再次感谢您的帮助。
【讨论】:
以上是关于重新加载 UITableView 时显示隐藏的 UIButton的主要内容,如果未能解决你的问题,请参考以下文章
android中webview 怎么实现网页加载时显示加载进度