0

我正在尝试更改我在 IB 中制作的 UISegmentedControl 的文本。这是代码

[changeButton removeAllSegments];
[changeButton insertSegmentWithTitle:NSLocalizedString(@"Traffic",@"traffic string")  atIndex:0 animated:YES];
[changeButton insertSegmentWithTitle:NSLocalizedString(@"Satellite",@"satellite string")  atIndex:1 animated:YES];

但是什么也没发生:我总是看到 IB 为我设置的默认标签(“第一”和“第二”)。当然,我将 IBOUtlet 放在我的 .h 中:

 __weak IBOutlet UISegmentedControl *changeButton;

我错过了什么?一般来说,当我在 IB 中创建控件时,为了以编程方式访问它,将 IBOutlet 放入 .h 是正确的方法吗?

4

3 回答 3

1
__weak

哦等等......如果它很弱,它会在范围结束时被释放并为空(当创建它的方法返回时)。省略__weak它应该没问题。

于 2012-11-26T09:33:11.203 回答
0

这仅在您同时设置属性和名为 changeButton 的 ivar 时才相关。OP 不清楚,所以把它放在这里以防万一。

看起来你正在混合属性和 ivars。

changeButton ivar 与属性 changeButton 不同。

删除行...

 __weak IBOutlet UISegmentedControl *changeButton;

从.h

并将代码更改为...

[_changeButton removeAllSegments];
[_changeButton insertSegmentWithTitle:NSLocalizedString(@"Traffic",@"traffic string")  atIndex:0 animated:YES];
[_changeButton insertSegmentWithTitle:NSLocalizedString(@"Satellite",@"satellite string")  atIndex:1 animated:YES];
于 2012-11-26T09:37:08.483 回答
0

解决了。问题是我在init方法中写了上面的指令。他们应该进入 viewDidLoad 方法!

于 2012-11-26T10:01:02.937 回答