Вызов метода контроллера One View из другого контроллера View - PullRequest
4 голосов
/ 24 октября 2011

У меня есть метод "someMethod", объявленный в OneViewController.h

@interface OneViewController
{
UIView *tempView;
..

}
-(void) someMethod ;
@end

и реализовано в файле OneViewController.m

@implementation OneViewController

-(void) someMethod 
{
tempView = [[UIView alloc]initWithFrame:CGRectMake(100, 50, 200, 250)];
tempView.backgroundColor = [UIColor yellowColor];
if([[self.view subviews] containsObject:tempView])
[tempView removeFromSuperView];
   else
   [self.view addsubview:tempView];

}

Я хочу вызвать someMethod , когда присутствует в другом viewController - secondViewController

(что-то вроде [OneViewController someMethod]), так что когда я вернусь в OneViewController, я смогу увидеть изменения, сделанные someMethod .

Нужно ли использовать методы appDelegate?

Я пытался следовать, но это не работает.

neViewController *newViewController = [[OneViewController alloc] init];
[newViewController someMethod];

Спасибо за любую помощь заранее.

Ответы [ 4 ]

4 голосов
/ 24 октября 2011

В SecondViewController объявите ссылку на класс OneViewController.Вы можете назначить свойство.Установите ссылку, прежде чем перейти к SecondViewController.Теперь со ссылкой вы можете вызвать метод экземпляра [_oneView someMethod].

Редактировать:

Объявить

OneViewController *_oneView;

Также добавить свойство assign,

@property(nonatomic,assign) OneViewController *_oneView;

Синтезируйте переменную в файле .m.

При отображении SecondViewController из OneViewController просто добавьте следующую строку.

secondView._oneView = self;
3 голосов
/ 23 января 2013

иногда вызывая метод directlry, создающий [classObject methodName], не отражает изменения в представлениях.Например, если вы хотите изменить свойство UIScrollView с scrollEnble = NO; на scrollEnable = YES;, оно не ссылается.Вы должны использовать синглтон UIApplication.

. Предположим, вы хотите вызвать ViewController1' s метод - (void)myMethod в ViewController2, тогда выполните следующие действия:

  • В вашем AppDelegateимпортировать ViewController1 и создать его объект *vc.Недвижимость Делар @property (strong, nonatomic) ViewController1 *vc;.synthesize также.
  • Теперь перейдите к Viewcontroller1 классу.Импортируйте AppDelegate.h в вас Viewcontroller1 и viewDidLoad напишите так:

    AppDelegate *appDelegate = (AppDelegate *)[[UIApplication sharedApplication] delegate];<br> appDelegate.vc1 = self;

  • Перейдите на ViewController2.h и импортируйте AppDelegate.h
  • Перейдите на строку, где вы хотите вызвать метод ViewController2, и напишите так:

    AppDelegate *appDelegate = (AppDelegate *)[[UIApplication sharedApplication] delegate];<br> [[appDelegate vc1] myMethod]; // to allow scrolling

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

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

Создайте протокол, внедрите его в secondViewController и установите делегат протокола в firstViewController, а затем используйте методы делегата для вызова соответствующих методов в secondViewController

Я надеюсь, что это работает для вас .. !!

0 голосов
/ 24 октября 2011

Один из способов сделать это - изменить объявление на +(void) someMethod ; в вашем OneViewController.h и соответственно изменить минус на плюс в файле реализации. Это сделает его методом класса, а не методом экземпляра. Затем в файле SecondViewController.m обязательно укажите @class OneViewController; перед объявлением реализации; тогда вы можете вызвать [OneViewController someMethod], и он должен выполнить. Ура!

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