重新加载 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的主要内容,如果未能解决你的问题,请参考以下文章

在搜索期间重新加载 UITableView

android中webview 怎么实现网页加载时显示加载进度

如何隐藏我的 Android 应用程序在加载时显示的“InstanceID 令牌:”框

Angularjs - 检查单选按钮时显示/隐藏表格行

发生单击时显示和隐藏GUI的最佳方法

带有隐藏 UITableView iOS 的 SearchBar