【问题标题】:How to change UISwitch's text iOS 5?如何更改 UISwitch 的文本 iOS 5?
【发布时间】:2011-12-01 11:56:19
【问题描述】:

我使用下面的代码(类别)来更改它不起作用的BU。

代码:(原代码取自iphone cookbook第8章)

#import "UISwitch+Extended.h"

@interface UISwitch (extended)
- (void) setAlternateColors:(BOOL) boolean;
@end

@interface _UISwitchSlider : UISlider
@end

@implementation UISwitch (Extended)

- (_UISwitchSlider *) slider { 
    return [[self subviews] lastObject]; 
}
- (UIView *) textHolder { 
    return [[[self slider] subviews] objectAtIndex:1]; 
}
- (UILabel *) leftLabel { 
    return [[[self textHolder] subviews] objectAtIndex:0]; 
}
- (UILabel *) rightLabel { 
    return [[[self textHolder] subviews] objectAtIndex:1]; 
}
- (void) setLeftLabelText: (NSString *) labelText { 
    [[self leftLabel] setText:labelText]; //error occurred here.
}
- (void) setRightLabelText: (NSString *) labelText { 
    [[self rightLabel] setText:labelText]; 
}

请有什么想法。

【问题讨论】:

  • 为什么依赖私有视图层次结构是一个糟糕的想法的一个典型例子。这是一种 hack,与大多数 hack 一样,一旦发生任何变化,它就会崩溃。

标签: iphone objective-c xcode custom-controls uiswitch


【解决方案1】:

此代码通过索引访问子视图,它们在新 iOS 中可能已更改。打印开关的所有子视图,找到你需要的。

【讨论】:

  • 我做到了 [[[self textHolder] subviews] objectAtIndex:0] 返回 UIImageview 并且 UIView 内也没有 UILabel ([[self textHolder] subviews])
  • 也许它在某个更深的地方,也许他们现在使用图像而不是文本,您可以将它们显示在某个地方以检查这一点并根据需要进行更改。抱歉,我没有确切的解决方案。
猜你喜欢
  • 2011-06-15
  • 2011-02-12
  • 2011-06-30
  • 2011-11-16
  • 2012-02-22
  • 2012-01-14
  • 2011-08-31
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多