IBOutletCollection и инициализация экземпляра пользовательского класса

Я использую класс MHRotaryKnob, и у меня возникают проблемы с его настройкой, чтобы несколько выходов имели одинаковые настройки по умолчанию. Не проблема заставить его работать с одним экземпляром с помощью IBOutlet, но теперь он ищет свойства класса MHRotaryKnob в NSArray.

Как именно мне определить rotateKnob в реализации, чтобы настройки передавались всем элементам управления, подключенным к IBOutletCollection? Свойства в реализации определены в MHRotaryKnob.m, но теперь компилятор ищет их в NSArray.

ViewController.h

#import <UIKit/UIKit.h>
#import "MHRotaryKnob.h"

@interface CBViewController : UIViewController

@property (nonatomic, retain) IBOutletCollection (MHRotaryKnob) NSArray *rotaryKnob;

ViewController.m

#import "ViewController.h"
#import "MHRotaryKnob.h"


@implementation CBViewController;

@synthesize rotaryKnob;


- (void)viewDidLoad
{
[super viewDidLoad];

rotaryKnob.interactionStyle = MHRotaryKnobInteractionStyleSliderVertical;
rotaryKnob.scalingFactor = 1.5f;
rotaryKnob.defaultValue = rotaryKnob.value;
rotaryKnob.resetsToDefault = YES;
rotaryKnob.backgroundColor = [UIColor whiteColor];
rotaryKnob.backgroundImage = [UIImage imageNamed:@"knob_passive.png"];
[rotaryKnob setKnobImage:[UIImage imageNamed:@"knob_passive.png"] forState:UIControlStateNormal];
[rotaryKnob setKnobImage:[UIImage imageNamed:@"knob_highlighted.png"] forState:UIControlStateHighlighted];
[rotaryKnob setKnobImage:[UIImage imageNamed:@"Knob Disabled.png"] forState:UIControlStateDisabled];
rotaryKnob.knobImageCenter = CGPointMake(35.0f, 32.0f);
[rotaryKnob addTarget:self action:@selector(rotaryKnobDidChange) forControlEvents:UIControlEventValueChanged];

person frankie    schedule 13.05.2012    source источник


Ответы (1)


IBOutletCollection — это коллекция, поэтому в данном случае она поддерживается NSArray.

Поэтому может помочь переименовать ivar в rotaryKnobs, чтобы прояснить этот факт, а затем использовать его следующим образом.

for (MHRotaryKnob *rotaryKnob in self.rotaryKnobs) {
    rotaryKnob.interactionStyle = MHRotaryKnobInteractionStyleSliderVertical;
    rotaryKnob.scalingFactor    = 1.5f;
    rotaryKnob.defaultValue     = rotaryKnob.value;
    rotaryKnob.resetsToDefault  = YES;
    rotaryKnob.backgroundColor  = [UIColor whiteColor];
    rotaryKnob.backgroundImage  = [UIImage imageNamed:@"knob_passive.png"];
    rotaryKnob.knobImageCenter  = CGPointMake(35.0f, 32.0f);
    [rotaryKnob setKnobImage:[UIImage imageNamed:@"knob_passive.png"]     forState:UIControlStateNormal];
    [rotaryKnob setKnobImage:[UIImage imageNamed:@"knob_highlighted.png"] forState:UIControlStateHighlighted];
    [rotaryKnob setKnobImage:[UIImage imageNamed:@"Knob Disabled.png"]    forState:UIControlStateDisabled];
    [rotaryKnob addTarget:self action:@selector(rotaryKnobDidChange) forControlEvents:UIControlEventValueChanged];
}
person Paul.s    schedule 13.05.2012