如何将count var(i = 1,2,3,4,...)集成到对象名称中?
我的代码无效。
for (int i=1; (i<=4); i++) {
self.cmdFertigOutlet(i).layer.cornerRadius = self.cmdAbbrechenOutlet(i).layer.cornerRadius = self.lblYear(i).layer.cornerRadius = self.lblMonth(i).layer.cornerRadius = self.lblDay(i).layer.cornerRadius = self.lblHour(i).layer.cornerRadius = self.lblMinute(i).layer.cornerRadius = self.lblSecond(i).layer.cornerRadius = self.txtBeschreibung(i).layer.cornerRadius = 5;
}
.h文件
@property (weak, nonatomic) IBOutlet UIButton *cmdAbbrechenOutlet1;
@property (weak, nonatomic) IBOutlet UIButton *cmdFertigOutlet1;
@property (weak, nonatomic) IBOutlet UITextField *txtBeschreibung1;
@property (weak, nonatomic) IBOutlet UILabel *lblYear1;
@property (weak, nonatomic) IBOutlet UILabel *lblMonth1;
@property (weak, nonatomic) IBOutlet UILabel *lblDay1;
@property (weak, nonatomic) IBOutlet UILabel *lblHour1;
@property (weak, nonatomic) IBOutlet UILabel *lblMinute1;
@property (weak, nonatomic) IBOutlet UILabel *lblSecond1;
@property (weak, nonatomic) IBOutlet UIButton *cmdAbbrechenOutlet2;
@property (weak, nonatomic) IBOutlet UIButton *cmdFertigOutlet2;
@property (weak, nonatomic) IBOutlet UITextField *txtBeschreibung2;
@property (weak, nonatomic) IBOutlet UILabel *lblYear2;
@property (weak, nonatomic) IBOutlet UILabel *lblMonth2;
@property (weak, nonatomic) IBOutlet UILabel *lblDay2;
@property (weak, nonatomic) IBOutlet UILabel *lblHour2;
@property (weak, nonatomic) IBOutlet UILabel *lblMinute2;
@property (weak, nonatomic) IBOutlet UILabel *lblSecond2;
依旧...... 3,4
.m文件而不是使用此(工作),我将使用for语句。我不明白,如何将我的对象名称放入数组中,然后将其与for语句一起使用。
self.cmdFertigOutlet1.layer.cornerRadius =
self.cmdAbbrechenOutlet1.layer.cornerRadius =
self.lblYear1.layer.cornerRadius =
self.lblMonth1.layer.cornerRadius =
self.lblDay1.layer.cornerRadius =
self.lblHour1.layer.cornerRadius =
self.lblMinute1.layer.cornerRadius =
self.lblSecond1.layer.cornerRadius =
self.txtBeschreibung1.layer.cornerRadius = 5;
self.cmdFertigOutlet1.layer.masksToBounds =
self.cmdAbbrechenOutlet1.layer.masksToBounds =
self.lblYear1.layer.masksToBounds =
self.lblMonth1.layer.masksToBounds =
self.lblDay1.layer.masksToBounds =
self.lblHour1.layer.masksToBounds =
self.lblMinute1.layer.masksToBounds =
self.lblSecond1.layer.masksToBounds =
self.txtBeschreibung1.layer.masksToBounds = YES;
self.cmdFertigOutlet2.layer.cornerRadius =
self.cmdAbbrechenOutlet2.layer.cornerRadius =
self.lblYear2.layer.cornerRadius =
self.lblMonth2.layer.cornerRadius =
self.lblDay2.layer.cornerRadius =
self.lblHour2.layer.cornerRadius =
self.lblMinute2.layer.cornerRadius =
self.lblSecond2.layer.cornerRadius =
self.txtBeschreibung2.layer.cornerRadius = 5;
self.cmdFertigOutlet2.layer.masksToBounds =
self.cmdAbbrechenOutlet2.layer.masksToBounds =
self.lblYear2.layer.masksToBounds =
self.lblMonth2.layer.masksToBounds =
self.lblDay2.layer.masksToBounds =
self.lblHour2.layer.masksToBounds =
self.lblMinute2.layer.masksToBounds =
self.lblSecond2.layer.masksToBounds =
self.txtBeschreibung2.layer.masksToBounds = YES;
对象名称如下:
cmdFertigOutlet1,cmdFertigOutlet2,cmdFertigOutlet3等。
cmdAbbrechenOutlet1,cmdAbbrechenOutlet2,cmdAbbrechenOutlet3等等 上
答案 0 :(得分:2)
您不能 - 变量的名称是编译时属性,并且在运行时不存在。
相反,使用包含四个元素的数组:
for (int i = 0; i < 4; i++) {
self.cmdFertigOutlet[i].layer.cornerRadius = ...
}
答案 1 :(得分:1)
我将给你一个使用NSTextField对象的简单示例(为了简单起见)。我想你会明白如何在你的申请中实现这一目标。
从你的语法,我也假设你在Swift编程。为了演示一种技术:
在我的AppDelegate类中,我将IBOutlets声明为4个文本框并在IB中连接它们:
@IBOutlet var testTextBox0:NSTextField!
@IBOutlet var testTextBox1:NSTextField!
@IBOutlet var testTextBox2:NSTextField!
@IBOutlet var testTextBox3:NSTextField!
我还声明了一个可变数组:
var testTextBoxes:NSMutableArray = NSMutableArray()
然后在applicationDidFinishLaunching函数中我说:
testTextBoxes.addObject(testTextBox0)
testTextBoxes.addObject(testTextBox1)
testTextBoxes.addObject(testTextBox2)
testTextBoxes.addObject(testTextBox3)
var localTextField:NSTextField = testTextBox0
for var i:Int = 0; i < 4; i++
{
localTextField = testTextBoxes.objectAtIndex(i) as NSTextField
localTextField.stringValue = "text field \(i)"
}
并正确设置所有文本框字符串值。
这说明了一种将对象加载到数组(或几种不同对象类型的数组)并在for循环中按顺序访问它们的技术。
这是Objective C中使用按钮对象的另一个例子:
transformButtons = [[NSMutableArray alloc] initWithCapacity:10]; // transformButtons is an instance variable
[transformButtons addObject:button0];
[transformButtons addObject:button1];
[transformButtons addObject:button2];
[transformButtons addObject:button3];
[transformButtons addObject:button4];
[transformButtons addObject:button5];
[transformButtons addObject:button6];
[transformButtons addObject:button7];
[transformButtons addObject:button8];
[transformButtons addObject:button9];
然后在代码中:
NSButton *localButton;
for(int i = 0; i < 10; i++)
{
localButton = [transformButtons objectAtIndex:i];
[localButton setEnabled:YES];
[localButton setHidden:NO];
[localButton setTitle:buttonNames[i]];
}
当然在.h文件中,这个东西被声明为:
NSMutableArray *transformButtons;
IBOutlet NSButton *button0;
IBOutlet NSButton *button1;
IBOutlet NSButton *button2;
IBOutlet NSButton *button3;
IBOutlet NSButton *button4;
IBOutlet NSButton *button5;
IBOutlet NSButton *button6;
IBOutlet NSButton *button7;
IBOutlet NSButton *button8;
IBOutlet NSButton *button9;
希望这有帮助。
EDIT2:
在.h文件中,如果要从其他类访问这些变量,为什么不:
@public
IBOutlet UIButton *cmdAbbrechenOutlet1;
IBOutlet UIButton *cmdFertigOutlet1;
IBOutlet UITextField *txtBeschreibung1;
IBOutlet UILabel *lblYear1;
IBOutlet UILabel *lblMonth1;
IBOutlet UILabel *lblDay1;
IBOutlet UILabel *lblHour1;
IBOutlet UILabel *lblMinute1;
IBOutlet UILabel *lblSecond1;
IBOutlet UIButton *cmdAbbrechenOutlet2;
IBOutlet UIButton *cmdFertigOutlet2;
IBOutlet UITextField *txtBeschreibung2;
IBOutlet UILabel *lblYear2;
IBOutlet UILabel *lblMonth2;
IBOutlet UILabel *lblDay2;
IBOutlet UILabel *lblHour2;
IBOutlet UILabel *lblMinute2;
IBOutlet UILabel *lblSecond2;
// And so on.....
@private
// Your private instance variables
在.m文件中,cmdAbbrechenOutlet1可以简单地作为cmdAbbrechenOutlet1访问。在另一个可以看到yourClass的类中,它可以作为yourClass-&gt; cmdAbbrechenOutlet1进行访问。