iphone sdk - вызов метода viewcontroller суперпредставления представления - PullRequest
3 голосов
/ 10 сентября 2009

привет, как я могу вызвать в текущем представлении метод, реализованный в контроллере представления текущего представления? не могли бы вы мне помочь, пожалуйста. * 1001 спасибо *

Ответы [ 4 ]

7 голосов
/ 10 сентября 2009

Обычно это делается через делегатов.

Пусть ваш интерфейс просмотра определит протокол и ссылку на некоторого делегата. Затем попросите ваш родительский viewcontroller реализовать этот протокол.

Тогда родитель сделает это:

someView.fooDelegate = self;

тогда представление сделало бы что-то вроде этого:

if(self.fooDelegate != nil) {
   if([fooDelegate respondsToSelector:...]) {
      [fooDelegate performSelector:...];
   }
}

Это не скомпилировано, но я думаю, вы понимаете суть.

4 голосов
/ 10 сентября 2009

Вы можете добавить функцию - (void) initWithView: (EchiquierDisplayView *) aSuperview или что-то в этом роде, определите ссылку в вашем

@interface pieceDraggableImageView : UIImageView { 
CGPoint startLocation; 
CGPoint startLocationInView;
EchiquierDisplayView *theSuperview;  
} 

@property (nonatomic, retain) EchiquierDisplayView *theSuperview;

-(void)correctDestinationPosition; 
-(void)initWithView:(EchiquierDisplayView *)aSuperview; 
...
-(void)askSuperview;
@end

@implementation pieceDraggableImageView

...
-(void)initWithView:(EchiquierDisplayView *)aSuperview
{
   theSuperview = aSuperview;
}
...
-(void) correctDestinationPosition
{
   [theSuperview correctIt];
}

Теперь убедитесь, что реализовали функцию correctIt в вашем суперпредставлении. Надеюсь, я правильно понял ваш вопрос ...

4 голосов
/ 10 сентября 2009

UIViews не знают своих контроллеров представления. Вам нужно будет создать пользовательский подкласс UIView, который поддерживает ссылку на один (или, возможно, более чем один) контроллер представления, хотя это вносит дополнительную связь между UIView и UIViewController.

Вы должны рассмотреть реализацию метода в классе суперпредставления или представления, а не реализовывать его в контроллере представления.

1 голос
/ 29 октября 2011

Вот еще один способ:

SuperviewsViewController *controller = self.superview.nextResponder;

if (controller && [controller isKindOfClass:[SuperviewsViewController class]])
{
    [controller method];
}

В большинстве случаев должно работать.

Справочник Apple по UIResponder

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...