【问题标题】:Hide/Show a button based on info in a plist根据 plist 中的信息隐藏/显示按钮
【发布时间】:2014-03-13 16:02:49
【问题描述】:

我需要一个 plist 中的数组来保存一些空值(即不是每个选择都会有音频),我创建如下:

<dict>
<key>WalkingAudio</key>
  <array>
     <string>NULL</string>
     <string>classical.mp3</string>
     <string>NULL</string>
  </array>

我从这样的选择中获取信息:

//awakeFromNib
NSString *myPlist = [[NSBundle mainBundle] pathForResource:@"MyPlist" ofType:@"plist"];
NSDictionary *rootDictionary = [[NSDictionary alloc] initWithContentsOfFile:myPlist];    
self.walkingAudio = [rootDictionary objectForKey:@"WalkingAudio"];

//didSlectItemAtIndex
walkingAudioChosen = [NSString stringWithFormat:@"%@", [self.walkingAudio objectAtIndex:self.carousel.currentItemIndex]];

我需要的是,仅当有音频可用时,按钮才能在下一个视图控制器上可见,如果没有音频可用,则保持隐藏状态。对我来说最有意义的是 prepareForSegue 方法中的 if-else 语句,如下所示:

if (walkingAudio == NULL) {
        dvc.playButton.hidden=YES;
    } else {
        dvc.playButton.hidden=NO;
    }

但它总是显示按钮并播放部分音频然后崩溃。我错过了什么?

【问题讨论】:

    标签: ios uibutton plist show-hide


    【解决方案1】:

    你的数组已经包含字符串,所以替换:

    walkingAudioChosen = [NSString stringWithFormat:@"%@", [self.walkingAudio objectAtIndex:self.carousel.currentItemIndex]];
    

    walkingAudioChosen = [self.walkingAudio objectAtIndex:self.carousel.currentItemIndex];
    

    因为格式对你没有任何帮助。

    if 语句更改为:

    if ([walkingAudioChosen isEqualToString:@"NULL"]) {
    

    因为你要比较 2 个对象的内容,而不是一个指向 NULL 的指针。

    (也更正了if中的一个错字,需要比较的是字符串,而不是数组)

    【讨论】:

    • 要添加到@Wain 示例,您还可以通过编码dvc.playButton.hidden = ([walkingAudioChosen isEqualToString:@"NULL"]); 来摆脱if...else
    • 刚刚更改了我的代码以反映您的建议,但我仍然遇到同样的问题。我在下一个视图控制器上有按钮效果(即阴影等)。我是否也需要将它们放在条件句中?
    • 知道了!对于任何有同样问题的人,我在视图控制器中使用了 if-else 语句,其中按钮位于我为按钮创建的阴影效果周围并且它起作用了。这两个答案都非常有帮助 - 非常感谢!
    猜你喜欢
    • 2020-07-05
    • 1970-01-01
    • 1970-01-01
    • 2018-03-29
    • 1970-01-01
    • 1970-01-01
    • 2016-08-19
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多