iphone - 查找 UIView 中某个类型的所有控件

标签 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!");
}

这段代码的问题是 RoundedRectButton 与 UIButton 类不匹配,而它实际上只是一个 UIButton。

我还尝试了以下方法:

for (UIButton* button in self.view.subviews)
{
// Do my stuff
}

但愚蠢的是,cocoa-touch 实际上只是列出了 for 循环中的所有 subview (还有 UITextFields 等)。

有没有办法真正从 View 中获取所有 UIButton?或者我真的需要通过查看选择器来找到控件吗?

最佳答案

当您可以通过使用 block 向 UIView 添加类别方法来获得令人惊叹的效果时,为什么还要编写这样的一次性代码呢?看一下最底部的代码。使用这种带有 block 的递归方法,您可以执行诸如禁用 View Controller View 中的所有 UITextField 之类的操作:

[self.view forEachUITextFieldDoBlock:^(UITextField *textField) {
   textfield.enabled = NO;
}];

或者淡出 View Controller View 中的所有 UITextField:

[UIView animateWithDuration:0.25 animations:^{

   [self.view forEachUITextFieldDoBlock:^(UITextField *textField) {
      textField.alpha = 0.0;
   }];

}
completion:^(BOOL finished){
   // nothing to do for now
}];

block 非常神奇,因为您甚至可以在 block 内传递其他方法。例如,下面的代码将找到的每个 UITextField 传递给我的 inserAdornmentImage:forTextView 方法,该方法将自定义背景图像添加到每个 TextView :

[self.view forEachUITextFieldDoBlock:^(UITextField *textField) {
    [self insertAdornmentImage:textFieldBGImage forTextField:textField];
}];

block 使该方法非常灵活,因此您不必每次想要使用找到的控件执行新操作时都编写专门的方法。这是魔法酱:

@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

关于iphone - 查找 UIView 中某个类型的所有控件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3829881/

相关文章:

iphone - 什么是 NSConcreteValue 以及如何提取它的值?

objective-c - 优雅地替换 URL/NSString 中的多个标记

Iphone 停止 ASIFormDataRequest

iphone - iOS 应用内购买收据未返回重新下载的 original_purchase_date

ios - 如何在 TableView Cell 上使用 iOSCharts (https ://github. com/danielgindi/Charts)?

cocoa-touch - 如何将 UIGestureRecognizer 添加到 UIBarButtonItem,就像 iPad 应用程序上常见的撤消/重做 UIPopoverController 方案一样?

ios - Apple Music 歌曲播放无法正常工作

ios - 在 iOS 中获取按钮的颜色

iphone - NSMutableArray 释放插入的对象。 -> 导致内存泄漏

iphone - 在 iPhone 的数组中存储地址簿联系人