iphone sdk - вызов метода viewcontroller суперпредставления представления

StackOverflow https://stackoverflow.com/questions/1405942

  •  05-07-2019
  •  | 
  •  

Вопрос

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

Это было полезно?

Решение

Вы можете добавить функцию - (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 в своем суперпредставлении. Надеюсь, я правильно понял ваш вопрос ...

Другие советы

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

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

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

someView.fooDelegate = self;

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

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

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

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

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

Вот другой способ:

SuperviewsViewController *controller = self.superview.nextResponder;

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

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top