【问题标题】:SetTitle Doesn't Change the Text of a UIButtonSetTitle 不会更改 UIButton 的文本
【发布时间】:2014-05-07 03:00:03
【问题描述】:

非常简单;只是试图将我的按钮的显示名称从“Button”更改为“a”。但是 setTitle 方法似乎没有做任何事情。我玩弄了 UIState,但这似乎并没有太大变化。

我可能需要合成什么吗?

[Button1 setTitle:@"a" forState:UIControlStateNormal];

编辑: 我做了一个 NSLog,按钮显示为 NULL,我被告知这意味着它没有正确连接。但我仔细检查了我的 Connections Inspector,查看了 H 文件,一切似乎都连接得很好。 (http://imgur.com/EFsp51U) 我错过了什么?

【问题讨论】:

  • 您确定您的 UIButton 插座已正确连接到 Button1?
  • 在 Connections Inspector 中,当我将鼠标悬停在 Button1 连接器上时,它会突出显示相应的按钮。我的 H 文件显示 Button1 IBOutlet 已连接。除了这两个之外,还有其他方法可以检查吗?
  • 它在一个 Void 方法中,在一个 switch 语句中,在 ViewController.m 文件中。
  • 你能写更多的代码吗?正如你所说的似乎很难发生 - 否则你会犯其他错误。因为你写的那行代码是完全有效的。
  • 请确认您没有为该 UIButton 设置图像

标签: ios objective-c uibutton


【解决方案1】:

如果您在 Interface Builder 中创建了按钮,请前往那里并将其类型更改为自定义。

并检查您是否正确连接了IBOutlet

【讨论】:

  • 我确实通过 Interface Builder 构建了按钮,但更改为自定义似乎并没有解决问题。我仔细检查了插座,似乎一切都连接好了。在 H 文件中使用直接 IBOutlets 而不是属性是否存在任何潜在问题?
  • 在这种情况下,它应该可以工作。您的 IBOutlets 连接正确。没有设置标题很奇怪。
  • 奇怪,我的设置为系统。将其更改为自定义有效。又有什么区别呢?
  • 这里是自定义按钮和系统按钮之间区别的详细答案。 stackoverflow.com/a/47468314/3081929
【解决方案2】:

我深入研究了我的代码,在我的 viewDidLoad 方法中,我有以下内容:

Button1 = NO;

我想我是在尝试输入“已选择”,但分心并没有返回,因此无意中关闭了我自己的按钮。正确的代码是:

self.Button1.selected=NO;

[self.Button1 setTitle:@"a" forState:UIControlStateNormal];

【讨论】:

    【解决方案3】:
    • 确保Button1 不是nil
    • 确保 Button1.hidden = NO;

    【讨论】:

      【解决方案4】:

      我不确定问题出在线程上,但您可能想尝试在主线程上设置标题:

      dispatch_async(dispatch_get_main_queue(), ^{
          [Button1 setTitle:@"a" forState:UIControlStateNormal];
      });
      

      【讨论】:

        【解决方案5】:

        您的代码完全有效。但为了确保一切正常,请添加以下额外行,

        Button1.selected = NO;
        [Button1 setTitle:@"a" forState:UIControlStateNormal];
        

        【讨论】:

          【解决方案6】:

          确保你已经合成了你的 Button。

          //this assumes you have a button "myButton" declared in your interface file
          @implementation
          @synthesize myButton;
          
          -(void) myMethod{
              [myButton setTitle:@"The new Title" forState:UIControlStateNormal];
          }
          @end
          

          您应该通过 IB 插座将您的按钮连接到您的 .h 文件完全通过代码创建按钮。

          此外,变量名最好不要以大写字母开头。

          【讨论】:

          • 你不能说,You should have your button connected through IB outlets to your .h file。您也可以将它们放在.m 文件中,这在现在更为常见。
          • forControlState 无效。这是forState
          • 另外,您应该不再需要合成 IBOutlets。
          【解决方案7】:

          如果你没有明确合成它,那么你应该调用任何一个

          [_Button1 setTitle:@"a" forState:UIControlStateNormal];

          [self.Button1 setTitle:@"a" forState:UIControlStateNormal];

          【讨论】:

          • 我没有将按钮创建为属性,而是将它们放在 H 文件中 @interface 下的 {} 之间。当我尝试做 self 或 _ 时,我得到一个错误。我还应该合成它们吗?
          • @Michelle 我认为最好的做法是将它们声明为属性。并不是说这是问题所在。 NSHipster.com 本周有一篇很好的文章。引用As with anything in modern Objective-C, properties are preferred to direct ivar access. The same is true of IBOutlets:nshipster.com/ibaction-iboutlet-iboutletcollection
          • 在现代客观 c 属性将自动为您合成。
          【解决方案8】:

          执行以下操作:

          1. NSLog(@"%@", Button1);
            

            并检查它是否不为零。

          2. 检查一下

            NSLog(@"%d", btn.state);
            

            应该返回 0。

          【讨论】:

          • 当我执行选项 1 并立即设置断点时,Button1=(UIButton *) nil。 NSLog 本身显示 (null) 我是否正确地阅读它没有分配该字符串?但为什么? (第二个选项根本不返回任何东西。)
          • 您是否在 XIb 中使用了 Button,然后检查 IBOutlet 连接。检查您没有在代码中设置 Button1=nil
          猜你喜欢
          • 1970-01-01
          • 2011-11-30
          • 2011-12-20
          • 1970-01-01
          • 1970-01-01
          • 2012-07-10
          • 2015-12-22
          • 2011-07-31
          • 1970-01-01
          相关资源
          最近更新 更多