Wim*_*tra 7 iphone cocoa-touch
我正在寻找一种自动本地化按钮/文本字段等文本的方法,对于这种方法,我需要在UIView上找到所有(例如)UIButton.
我尝试了以下两种方法,但它们都没有像我希望它们一样工作:
for (UIView* subView in self.view.subviews)
{
NSLog(@"object class : %@", [subView class]);
if ([subView isMemberOfClass:[UIButton class]])
NSLog(@"Button found!");
}
Run Code Online (Sandbox Code Playgroud)
这段代码的问题是RoundedRectButton与UIButton类不匹配,而它实际上只是一个UIButton.
我也尝试过以下方法:
for (UIButton* button in self.view.subviews)
{
// Do my stuff
}
Run Code Online (Sandbox Code Playgroud)
但愚蠢的是,可可触摸实际上只列出了for循环中的所有子视图(也是UITextFields等).
有没有办法从视图中获取所有UIButton?或者我真的需要通过查看他们的选择器来找到控件.
mem*_*ons 10
为什么要通过添加类别方法来UIView使用块来拨打真棒来编写这样的一次性代码?看看底部的代码.使用这个带块的递归方法,你可以在视图控制器的视图中禁用所有UITextFields:
[self.view forEachUITextFieldDoBlock:^(UITextField *textField) {
textfield.enabled = NO;
}];
Run Code Online (Sandbox Code Playgroud)
或者在视图控制器的视图中淡出所有UITextField:
[UIView animateWithDuration:0.25 animations:^{
[self.view forEachUITextFieldDoBlock:^(UITextField *textField) {
textField.alpha = 0.0;
}];
}
completion:^(BOOL finished){
// nothing to do for now
}];
Run Code Online (Sandbox Code Playgroud)
块非常惊人,甚至可以在块内传递其他方法.例如,下面的代码将每个UITextField找到的代码传递给我的inserAdornmentImage:forTextView方法,该方法为每个文本视图添加自定义背景图像:
[self.view forEachUITextFieldDoBlock:^(UITextField *textField) {
[self insertAdornmentImage:textFieldBGImage forTextField:textField];
}];
Run Code Online (Sandbox Code Playgroud)
块使得该方法非常灵活,因此您不必在每次使用所找到的控件执行新操作时编写专门的方法.这是神奇的酱汁:
@implementation UIView (Helper)
- (void) forEachUITextFieldDoBlock:(void (^)(UITextField *textField))block
{
for (UIView *subview in self.subviews)
{
if ([subview isKindOfClass:[UITextField class]])
{
block((UITextField *)subview);
} else {
[subview forEachUITextFieldDoBlock:block];
}
}
}
@end
Run Code Online (Sandbox Code Playgroud)
第一种方法是正确的,除了你需要将isMemberOfClass函数更改为isKindOfClass:
isKindOfClass:返回一个布尔值,指示接收者是给定类的实例还是从该类继承的任何类的实例.
| 归档时间: |
|
| 查看次数: |
6082 次 |
| 最近记录: |