2014-09-25 2 views
0

Вот тривиальный VC называется Clubраскадровки, перетащите ссылку на IBAction с точки зрения контейнера родителю

enter image description here

Club имеет функцию:

@implementation Club 
-(IBAction)clickMe 
    { 
    NSLog(@"Whoa!"); 
    } 
@end 

Теперь о ButtonA. Очевидно, что в Storyboard вы можете перетащить из ButtonA в функцию «clickMe» в «Клубе».

Теперь. Что касается ButtonB.

Есть ли способ, в Раскадровка, перетащить из ButtonB, чтобы «щелкнуть мышью» в «Клубе»?

Возможно, используя загадочные объекты «объект», или ... ??

Обратите внимание, что, очевидно, вы можете сделать класс для небольшой точки зрения, и есть функция:

@implementation SmallViewOnRight 
-(IBAction)sameAsClickMe 
    { 
    [(Club*)self.parentViewController clickMe]; 
    } 
@end 

Затем вы можете перетащить из ButtonB в sameAsClickMe. Но это полная неприятность.

Обратите внимание, что использование таких видов контейнеров очень удобно для обработки различных «областей» вашего основного вида (особенно, если у вас есть вещи, скользящие вокруг и так далее, и когда у вас много вещей «друг на друга» «). Очень удобно перемещать «разделы» вне основного вида, используя представления контейнера. Но это полная неприятность, «пропуская» клики.

Есть ли неясный способ сделать это в Раскадровке? Ура!

Просто FTR, iOS7 + только, ничего старше

Примечание - происходит в «другом направлении» не хорошо изучены и достаточно легко сделать.

+0

Я не думаю, что это возможно, если вы не установите свой 'View Controller' как' Club'.По коду вы можете использовать свою ссылку «Club» и установить действие, которое вызывается из 'buttonB', как одно действие« Клуба »(если вам нужно некоторое var/let in to update UI или разработать) – r4id4

+0

По моему опыту, точка зрения контейнера должна иметь отдельный контроллер представления, который заботится о себе, чтобы вы не оказались в одном гигантском раздутом классе UIViewController. То, как я бы справился с этой ситуацией, было бы сделать протокол для второго ViewController и установить его делегат как класс ClubViewController. Затем вы можете сделать то, что вы сказали, и использовать метод 'sameAsClickMe', и вызвать его через метод clickMe ™ для ClubViewController через делегат. – sfeuerstein

+0

Эй, ребята! Странно, что вы не можете просто перетащить его в раскадровку, потому что ** они оба созданы **, поэтому нет причин, по которым невозможно. Мне интересно о таинственном объекте? Object? Может ли это иметь значение? SFeuer, в моем длинном параграфе («Примечание ...») Я объясняю пример использования. Знаете, практически невозможно сделать действительно сложные (особенно слайд-экраны) экраны, не используя представления контейнера как небольшие «под» области. Загадка! – Fattie

ответ

0

Нет, вы не можете этого сделать, но вы можете использовать делегатов для этого поведения.

В SecondViewController.h:

@protocol SecondViewControllerDelegate <NSObject> 
-(void)clickMe; 
@end 

@interface SecondViewController.h: UIViewController 

@property (weak, nonatomic) id <SecondViewControllerDelegate> delegate; 

@end 

В SecondViewController.m:

@implementation SecondViewController 

- (IBAction) buttonBClicked:(id)sender { 
if ([self.delegate respondsToSelector:@selector(clickMe)] { 
     [self.delegate performSelector:@selector(clickMe)]; 
    } 
} 

@end 

В ClubViewController.m:

#import "SecondViewController.h" 
@interface ClubViewController() <SecondViewControllerDelegate> 
@end 

@implementation ClubViewController.m 

// make yourself a delegate of SecondViewController somewhere in your code. For example, in prepareForSegue. 

-(void)clickMe { 
    NSLog (@"Clicked"); 
} 

@end 

EDIT: Попробуйте разматывать Segues! Я написал ответ here о том, как их использовать. Но пропустите шаг 4.

+0

Хороший пример использования делегата! Обратите внимание, что, как я уже сказал, вы тривиально [self.parentViewController clickMe]; в коде, в этой ситуации. – Fattie

+0

Я пропустил это :)! Но он работает? Я никогда не пробовал отправлять сообщение родительскому контролеру, кроме как отклонять его. – Razvan

+0

@JoeBlow Проверьте мое редактирование. – Razvan

Смежные вопросы