是否可以遍历相同类的属性以将其添加到NSMutableArray?

时间:2019-05-06 15:34:31

标签: objective-c loops properties

我有2套UIButton属性(来自Main Storyboard的IBOutlet位于自定义View Controller子类头文件中)。

每套有5个按钮。在View Controller的多种方法中,我需要访问它们

viewDidLoad中,我有2个NSMutableArray数组用于2套。我addobject:(*UIButton)每组五次。最后,这是同一行代码,为每个不同的按钮编写了10次。

在整个View Controller中的多种方法中,我需要访问这些数组。我具有数组,以便生成按下哪个按钮的索引(在每个按钮点击IBAction方法中设置的索引)。我没有为按钮写出5种方法,而是写了一种。

viewDidLoad中,有一种很精巧的方法来将10行重复压缩为一个不错的for循环,该循环可以枚举每个按钮并将该数据添加到相应的NSMutableArray中?

还是我将其全部写出来?

此外,根据我所描述的,这种方法是否是访问和变异相同类别和目的的多个按钮的不好解决方案?

在主情节提要中,我决定给每个按钮一个标签值(0-4)。第一组:按钮1(0),按钮2(1)...等 第二个:同样的事情。

这可能仅适用于按钮交互方法(例如,可以使用sender来访问标签。)在viewDidLoad中,还没有发生这种交互。

这是现在的样子:

- (void)viewDidLoad
{
    [super viewDidLoad];

    self.dirBtns = [[NSMutableArray alloc] initWithCapacity:5];
    [self.dirBtns addObject:self.salineDirBtn];
    [self.dirBtns addObject:self.sampleDirBtn];
    [self.dirBtns addObject:self.airDirBtn];
    [self.dirBtns addObject:self.wasteDirBtn];
    [self.dirBtns addObject:self.lowlossDirBtn];

    self.runBtns = [[NSMutableArray alloc] initWithCapacity:5];
    [self.runBtns addObject:self.salineRunBtn];
    [self.runBtns addObject:self.sampleRunBtn];
    [self.runBtns addObject:self.airRunBtn];
    [self.runBtns addObject:self.wasteRunBtn];
    [self.runBtns addObject:self.lowlossRunBtn];

    // other stuff
}

1 个答案:

答案 0 :(得分:1)

两个选项:

  1. 您可以使用数组文字:

    self.dirBtns = @[self.salineDirBtn, self.sampleDirBtn, self.airDirBtn, self.wasteDirBtn, self.lowlossDirBtn];
    self.runBtns = @[self.salineRunBtn, self.sampleRunBtn, self.airRunBtn, self.wasteRunBtn, self.lowlossRunBtn];
    

    如果这样做,可以将dirBtnsrunBtns设为NSArray而不是NSMutableArray

  2. 您可以使用出口集合(如this answer中所述),例如:

    @property (strong, nonatomic) IBOutletCollection(UIButton) NSArray *dirBtns;
    @property (strong, nonatomic) IBOutletCollection(UIButton) NSArray *runBtns;
    

    hook up iboutletcollection

    然后您可以将按钮连接到IB的这些插座集合,而无需任何代码。

最底线,如果阵列中的顺序很重要,我建议选项1,否则建议选项2。