簡體   English   中英

在ViewController.m中,如何通過字符串訪問ViewController.h中聲明的屬性?

[英]In ViewController.m, how can I access a property declared in ViewController.h by a string?

例如,我在ViewController.h中:

@property (weak, nonatomic) IBOutlet UIButton *buttonA;
....
@property (weak, nonatomic) IBOutlet UIButton *buttonZ;

在我的ViewController.m中,我有:

for (unichar ch = 'A'; ch <= 'Z'; ch++) {
    NSMutableString *nameOfButton = [[NSMutableString alloc] initWithString:@"button"];
    [nameOfButton appendString:[NSString stringWithCharacters:&ch length:1]];
    //Code equivalent to change "self.(nameOfButton).text = @"";"
}

我正在嘗試遍歷所有按鈕,並更改其文本屬性。 基本上,我不確定如何使上面的for循環做相當於:

self.buttonA.text = @"";
self.buttonB.text = @"";
...
self.buttonZ.text = @"";

因為我使用的是NSString'nameOfButton'而不是實際的屬性名稱。

您可以創建一個IBOutlet集合而不是多個UIButton IBOutlet,並遍歷您的outlet集合中的按鈕。 在視圖和代碼之間建立連接時,在彈出的對話框中選擇插座集合。 (在連接下)

示例:調用您的IBOutlet集合按鈕列表並循環遍歷它:

for (UIButton *button in self.buttonList) {
    [button setTitle:@"text" forState:UIControlStateNormal];
}

PS:記住要始終使用set title for state,。text不能用於按鈕

您可以使用KVC(鍵值編碼)來使用字符串提取屬性,例如

UIButton *btn = (UIButton *)[self valueForKey@"buttonA"];

這對你有用

for (unichar ch = 'A'; ch <= 'Z'; ch++) {
    NSMutableString *nameOfButton = [[NSMutableString alloc] initWithString:@"button"];
    [nameOfButton appendString:[NSString stringWithCharacters:&ch length:1]];
    //Code equivalent to change "self.(nameOfButton).text = @"";"
    NSLog(@"%@",nameOfButton);


    UIButton *btn = (UIButton *)[self valueForKey:nameOfButton];
    [btn setTitle:nameOfButton forState:UIControlStateNormal];
}

代碼使本系列中的所有按鈕都將標題更改為出口名稱。具有該日志的代碼是自解釋的

您可以在循環中使用KVC(鍵值編碼):

[self setValue:@"" forKeyPath:[NSString stringWithFormat:@"%@.text", nameOfButton]];

如果使用以下內容將它們添加到viewcontroller的視圖中,則可以遍歷self.view中的所有按鈕

for (UIButton *button in self.view.subviews) {
// your code here

}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM