Получение значений из подпредставлений Objective-c - PullRequest
0 голосов
/ 28 октября 2010

Я создал подкласс UIView, который представляет собой вращающееся колесо. Это колесо является частью другого UIView, изображение которого находится в верхнем правом углу. При вращении колеса в функции touchMoved возвращается самый правый элемент (его номер). Мне нужно затем изменить изображение родителя автоматически при включении подпредставления (когда возвращается номер)

Если у меня есть этот номер в подпредставлении, как я могу вернуть его родителю или изменить изображение (в родительском UIView) из подпредставления?

Спасибо

Ответы [ 2 ]

1 голос
/ 28 октября 2010

Метод делегата, упомянутый Phlibbo , является одним из способов сделать это. Поскольку ваш подкласс пользовательского представления больше похож на элемент управления со значением, я бы создал подкласс UIControl вместо UIView и использовал бы событие UIControlEventValueChanged.

В вашем пользовательском подклассе уведомите, что значение изменилось (возможно, в touchedEnded:withEvent:):

- (void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event {
    [self sendActionsForControlEvents:UIControlEventValueChanged];
}

Теперь наблюдайте за изменениями значения в вашем контроллере и позвольте контроллеру обновить изображение в другом представлении.

- (void) viewDidLoad {
    [wheelControl addTarget:self action:@selector(wheelValueChanged:) forControlEvents:UIControlEventValueChanged];
}

- (void) wheelValueChanged:(id)sender {
    // update your image based on the wheel value of sender (wheelControl in this case).
}
1 голос
/ 28 октября 2010

Сначала создайте протокол, который определяет методы, которые вы хотите вызвать в своем суперпредставлении:

@protocol wheelViewDelegate {
   -(void)doSomething;
}

Ваше суперпредставление должно реализовать этот протокол:

@interface superView:UIView<wheelViewDelegate> {
...
}
...
@end

Кроме того, вам, очевидно, необходимо реализовать метод doSomething.

UIView, который содержит колесо, должен быть подклассом UIView и содержать делегата, например:

@interface WheelView : UIView {
id<wheelViewDelegate> delegate;
...
}
@propery (nonatomic, assign) id<wheelViewDelegate> delegate;
...
@end

Не забудьте @synthesize id; в вашей реализации.

Теперь вы можете вызвать doSomething в своем суперпредставлении из подпредставления:

[self.delegate doSomething];

EDIT:

Хорошо, я думал, что это очевидно, но, конечно, вам нужно установить делегата следующим образом:

//In your superView:
WheelView* wv = [WheelView initSomeHow];
wv.delegate = self;
...