如何在ios中实际连接信号到插槽?

时间:2015-12-05 07:16:11

标签: ios objective-c xcode uiview

我在自定义UIView中创建了一个细分控件,现在我需要在细分控制发生变化时更改UIView's颜色。

- (instancetype)initWithFrame:(CGRect)frame {
    self = [super initWithFrame:frame];
    if (self) {
        self.backgroundColor = [UIColor clearColor];
        self.circleColor = [UIColor lightGrayColor];
        self.segmentControl = [[UISegmentedControl alloc] initWithItems: @[@"Red", @"Green", @"Blue"]];
        CGRect f = self.segmentControl.frame;
        f.origin = CGPointMake(0, [UIApplication sharedApplication].statusBarFrame.size.height);
        self.segmentControl.frame = f;
        [self addSubview:self.segmentControl];
    }
    return self;
}

我认为有类似self.segmentControl setCallbackForEvent:(UIEvent*)event:(Callback)action的内容,但我无法在UIView找到这样的方法。

所以我尝试了下面的代码,但是也不行:

- (void)touchesEnded:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event {
    [super touchesEnded:touches withEvent:event];
    NSSet<UITouch*>* segTouches = [event touchesForView:self.segmentControl];
    if (segTouches.count != 0 && self.segmentControl.selected) {
        UIColor* color = nil;
        switch (self.segmentControl.selectedSegmentIndex) {
            case 0:
                color = [UIColor redColor];
                break;
            case 1:
                color = [UIColor greenColor];
                break;
            case 2:
                color = [UIColor blueColor];
                break;
            default:
                assert(0);
                break;

        }
        self.circleColor = color;
    }
}

如果没有ios中的界面构建器,我怎样才能逐步将信号(段控制值已更改)连接到插槽(更改为视图颜色)?

2 个答案:

答案 0 :(得分:1)

来自Apple Docs的分段控件

  

使用UIControlEventValueChanged常量为分段控件注册目标操作方法,如下所示。

[segmentedControl addTarget:self
                 action:@selector(changeColor:)
       forControlEvents:UIControlEventValueChanged];

然后,您可以创建一个changeColor:函数并将颜色更改代码放在那里。

答案 1 :(得分:1)

您可以在doc上了解如何使用UISegmentedControl