0

起動時にすべてのボタンで何かを変更したいので、このコードを実行してViewControllerいます。

- (void)viewDidLoad
{
    [super viewDidLoad];
    // Do any additional setup after loading the view, typically from a nib.
    
    int i = 1;
    
    for (UIButton *btn in self.view.subviews)
    {
        NSLog(@"Count I - %d ", i);
        //NSLog(@"Count I - %d - %@", i, btn.titleLabel.text);
        
        i++;
    }
}

出力する:

2013-11-11 08:15:13.315 testingSingle[7876:a0b] カウント I - 1

2013-11-11 08:15:13.317 testingSingle[7876:a0b] カウント I - 2

これは新しいプロジェクトであり、ストーリーボードまたはコードで VC に何もドラッグまたは変更されていないため、これは私には奇妙に思えます.2 があることを示唆するものは何もありませんUIButton.

この場合、どうすればこのメッセージを受け取ることができますreturn 0か? これが原因でアプリがクラッシュします。

4

1 に答える 1

2

NSLog を次のように変更する

NSLog(@"%@", [btn class]);

出力を与える

_UILayoutGuide
_UILayoutGuide

これは、ボタンはありませんが、他のいくつかのビューがあることを示しています (おそらく Autolayout に必要です)。

for (UIButton *btn in self.view.subviews)

すべてのサブビューを列挙します。ループ変数btwが として宣言されているかどうかは問題ではありませんUIButton *。ボタンのみを処理するには、各オブジェクトのクラスをテストする必要があります。

for (UIView *subView in self.view.subviews) {
    if ([subView isKindOfClass:[UIButton class]]) {
        UIButton *btn = (UIButton *)subView;
        // Do something with btn ...
        i++;
    }
}
于 2013-11-10T19:26:18.063 に答える