2011-01-20 17 views
-1


私は現在、多くの視点で多くの類似性を持つプロジェクトに取り組んでいます。 ルートクラスから継承されたクラスにサブビューを送信する方法があるかどうかはわかります。ここで継承されたサブビューをビューに追加

は私RootViewControllerです:

@class CustomView; 
@interface RootViewController : UIViewController { 
     IBOutlet CustomView *_aCustomView; 
} 
@end 

@implementation RootViewController 
- (void)viewDidLoad { 
    [super viewDidLoad]; 
    UISwipeGestureRecognizer *swipRecognizer; 

    // swipe left management 
    swipRecognizer = [[UISwipeGestureRecognizer alloc] initWithTarget:self 
                   action:@selector(handleSwipeFrom:)]; 
    swipRecognizer.direction = UISwipeGestureRecognizerDirectionLeft; 
    swipRecognizer.numberOfTouchesRequired = 2; 
    swipRecognizer.delegate = self; 
    [self.view addGestureRecognizer:swipRecognizer]; 
    [swipRecognizer release]; 
} 

- (void)handleSwipeFrom:(UISwipeGestureRecognizer *)recognizer 
{ 
    NSLog(@"swip detected"); 
    [self.view addSubview:_aCustomView]; 
} 

HomeViewController:

@interface HomeViewController : RootViewController { 
} 
@end 

私はラインコードを節約するために、このような私のRootViewControllerHomeViewControllerから一部のViewControllerウィッヒの継承を作成します。私がHomeViewControllerにいるとき、私はスワイプをうまく検出しましたが、まだ私のカスタムであるsubView(私のRootViewControllerから来ています)を私のHomeViewControllerに追加することはできませんでした。

Thxたくさん。 よろしくお願いします。 kl94

+0

similitudeとは何ですか?あなたの質問は不明です。あなたが試したこととそれがどうしてうまくいかなかったのかを教えてください。ルート・クラスから継承されたクラスにサブビューを「送る」とはどういう意味ですか? –

+0

私は同意する、私の質問は明確ではなかった。申し訳ありません...私は私が必要としていることを理解することを希望して投稿を編集しました。 – klefevre

答えて

0

モデルのオブジェクトでビューを初期化するコンストラクタメソッドをカスタムビューに追加する必要があります。例えば

私はあなたのRootViewControllerあなたはCustomerオブジェクトとその顧客に関する情報を表示するCustomerViewを持っています。あなたがメソッドを作成する必要がありCustomerViewで

:あなたは、あなたのHomeViewControllerで同じCustomerViewを表示するだけで、あなたのHomeViewControllerの財産として、およびのviewDidLoadでCustomerオブジェクトを追加する必要がある場合

-(id) initWithFrame:(CGRect) frame customer:(Customer) customer; 

だけCustomerViewを初期化with:

CustomerView *customerView = [[CustomerView alloc] iniFrame:CGRectMake(...) customer:currentCustomer; 
[self.view addSubView:customerView]; 
[customerView release]; 

これは役に立ちます。 Vincent。

+0

私のカスタムクラスを管理するのは良い考えです。あなたは私の答えを見つけるのを手伝ってくれました。それは実際に初期化についての質問でした。 – klefevre

0

私は解決策を見つけました。私HomeViewControllerで

私は方法initWithNibName:bundle:オーバーライドしました::

- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil { 
    self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil]; 
    if (self) { 
     // Custom initialization. 
    } 
    return self; 
} 

そして、私RootViewControllerを私は後でそれを後悔していないいただければ幸い初期化されていないIBOutletオブジェクトを追加しようとしましたについての私の問題がありました。

- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil { 
    self = [super initWithNibName:@"RootViewController" bundle:nibBundleOrNil]; 
    if (self) { 
     // Custom initialization. 
    } 
    return self; 
} 
+0

初期化が問題の場合は、コントローラでviewDidLoadをフックできます。 –

+0

はい、今私は知っている。しかし、現時点では、私はいくつかのIBオブジェクトを初期化するためにinitWithNibName:bundle:を使用します。私はそれが良い方法だと思う。とにかくThx – klefevre

関連する問題