カスタムを宣言する方法を考えてみましたUINavigationController
Xcode 4.2
?私はAPIを使用するプロジェクトを作成しました。UINavigationController
私のプロジェクトはストーリーボードを使用せず、ビューベースのアプリケーションです。ありがとうxcodeでカスタムUINavigationControllerを宣言してください。4.2
答えて
UINavigationController
を継承によってサブクラス化するのは簡単です。それはOOPの重要な概念です。
//YourClass.h
@interface YourClass : UINavigationController
@end
//YourClass.m
@implementation YourClass
@end
しかし
このクラスは、一般的にそのままで使用されているが、iOSの6以降でサブクラス化することができます。
UINavigationControllerの概要で書かれています。したがって、iOS 5以前のバージョンをサポートしている場合は、UINavigationController
をサブクラス化できない場合があります。あなたのサブクラスが正しく動作しない可能性があります。このstackoverflow topicに関する良い議論を見つけることができます。
私は自分自身を書いています。キーはUIViewController
をサブクラス化し、self.titleとそのアイコンを最初に「含む」クラスに設定することを忘れないでください。それ以外の場合、tabBarIconsには何も表示されません。 UINavigationController
はUIViewController
から1レベルしかないので、ヘッダーを表示して実装方法を簡単に確認できますが、それらは「コピーオーバー」する唯一の本当のキーでした。
Interface Builder
の場合は、それに合わせてペン先を持っていると仮定して、画面のサイズ(311のタブバーとステータスバーがある場合)のメインビューを作成してから、ナビゲーションバーであり、下側のビューはコンテナとしてアウトレットされています。
注:私がサブビューの相対的な位置を知っているにもかかわらず、ビューをピクセルの高さでずらさずに移動しようとすることに関して、多くの問題にぶつかりました。それは何らかの理由で、たとえ横向きに動くだけであっても仕事をしなかっただけです。
誰もこのタイプのものを持っていないようですので、私はこのコードを投稿しています。これは誰かを助けるかもしれません。 Stephen Johnson。
輸入 "CustomNavigationController.h"
@implementation CustomNavigationController
@synthesize backgroundImg, title1, title2, title3;
- (id) initWithRootViewController:(UIViewController*)c;
{
self = [super initWithNibName:nil bundle:nil];
if (self) {
containedControllers = [[NSMutableArray alloc] initWithObjects:c, nil];
self.title1.text = c.title; //a custom outlet for text of title, resembling the NavigationController's title basically
[container addSubview:c.view];
c.view.frame = container.bounds;
back.hidden = YES; //backbutton
c.customNavigationController = self;
self.title = c.title;
self.tabBarItem.image = c.tabBarItem.image;
}
return self;
}
- (void)didReceiveMemoryWarning
{
// Releases the view if it doesn't have a superview.
[super didReceiveMemoryWarning];
// Release any cached data, images, etc that aren't in use.
}
#pragma mark - View lifecycle
- (void)viewDidLoad
{
[super viewDidLoad];
// Do any additional setup after loading the view from its nib.
}
- (void)viewDidUnload
{
[super viewDidUnload];
// Release any retained subviews of the main view.
// e.g. self.myOutlet = nil;
}
- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation
{
// Return YES for supported orientations
return (interfaceOrientation == UIInterfaceOrientationPortrait);
}
- (void) dealloc;
{
[containedControllers removeAllObjects];
[containedControllers release];
[super dealloc];
}
- (void) pushViewController:(UIViewController*)v animated:(BOOL)a;
{
float w = container.frame.size.width;
float h = container.frame.size.height;
[containedControllers addObject:v];
[self.view addSubview:v.view];
// v.view.frame = CGRectMake(w,0,w,h);
v.view.frame = container.bounds;
v.view.center = CGPointMake(v.view.center.x + w, v.view.center.y + container.frame.origin.y);
v.customNavigationController = self;
float time = a ? 0.31 : 0;
UIViewController * lastViewController = nil;
lastViewController = (UIViewController*)[containedControllers lastObject];
[UIView animateWithDuration:time animations:^{
for (UIViewController * c in containedControllers) {
// c.view.frame = CGRectMake(c.view.frame.origin.x + w*direction, 0, w, h);
c.view.center = CGPointMake(c.view.center.x + w*-1, c.view.center.y);
}
} completion:^(BOOL finished) {
self.title1.text = v.title;
back.hidden = NO;
}];
}
- (void) popViewControllerAnimated:(BOOL)a;
{
float w = container.frame.size.width;
float h = container.frame.size.height;
float time = a ? 0.31 : 0;
float direction = 1;
[UIView animateWithDuration:time animations:^{
for (UIViewController * c in containedControllers) {
// c.view.frame = CGRectMake(c.view.frame.origin.x + w*direction, 0, w, h);
c.view.center = CGPointMake(c.view.center.x + w*direction, c.view.center.y);
}
} completion:^(BOOL finished) {
// lastViewController = (UIViewController*)[containedControllers lastObject];
[containedControllers removeLastObject];
self.title1.text = ((UIViewController*)[containedControllers lastObject]).title;
if ([containedControllers count] > 1) {
back.hidden = NO;
}
else
back.hidden = YES;
}];
}
- (IBAction) popLastVC;
{
[self popViewControllerAnimated:YES];
}
@end
- 1. Xcode 4.2でReachability.mを使用してください。
- 2. xcode 4.2でUITableViewControllerをUIViewControllerに変換してください。
- 3. タイプのインスタンスの宣言を参照してください
- 4. 関数宣言の構文を説明してください
- 5. CMakeにターゲットフォニーを宣言させてください
- 6. クラスを宣言しないで、メモリからダンプしてください。
- 7. Cocoapodsで宣言されていないXcodeの使用
- 8. ActivityNotFoundExceptionただし、マニフェストで既に宣言されている
- 9. 要素の宣言から親を選択してください
- 10. このPOSIX getline()関数の宣言を説明してください。
- 11. C++ - エラーC2784: - 'std :: operator <<'の宣言を参照してください
- 12. xcodeの宣言されていない識別子__bridge
- 13. Android 4.2(以上)のAIRPLANE_MODE_ONを変更してください
- 14. Enum宣言で使用されているジェネリックを説明してください
- 15. Xcodeヘルプ? - "'didRotateFromInterfaceOrientation'は宣言されていません" + "Expected"; ' before: 'token'
- 16. Xcode 4.2が正しくデバッグされない
- 17. 元のファイルを含めてファイル内でのみ宣言されるオブジェクトを使用してください
- 18. C++:std :: functionsを宣言する方法を教えてください。
- 19. Xcode 9.0で宣言されていない識別子を使用する
- 20. 複数のconstを1つの変数宣言に入れてください
- 21. SplitViewController NSNotificationsを使用してXcode 4.2で他のビューを開く
- 22. 前方宣言とプロトタイプ宣言 "宣言"を呼び出すだけですか?
- 23. Lionの下でXcode 4.2にPPC/PPC64サポートを追加する方法を教えてください。
- 24. `DebugActiveProcessStop 'は宣言されていません(最初にこの関数を使用してください)
- 25. Xcode 4.2でコンパイルエラー
- 26. メソッドのカスタム属性宣言
- 27. XNA 4.0カスタム頂点宣言
- 28. MonotouchまたはXcode 4.2でPDFファイルにデジタル署名する方法を教えてください。
- 29. Javaでカスタム例外を宣言する
- 30. using宣言は、using宣言の上に宣言されたオーバーロードだけをインポートしますか?例えば
私はインターフェイスのためにIBOutletを定義する必要があり、ありがとう! –
いいえ、あなたは 'YourClass'のインスタンスを作成する必要があります。 '[YourClass alloc] init]'などです。しかし、私はあなたがApple docに従うことをお勧めします。目標を説明しようとすると、別の方法を見つけることが可能かもしれません。 –
私のアプリケーション用の画像ギャラリーを作成する必要があり、このapi: 'https:// github.com/gdavis/FGallery-iPhone'が見つかりました。FGalleryはFGalleryViewControllerDelegateプロトコルを実装して、ギャラリー。それから、UIViewControllerと同じようにナビゲーションコントローラスタックにプッシュしてください。Xcode 4.2では、以前のバージョンのようにMainWindowを作成しないため、カスタムUINavigationControllerを作成してギャラリーをプッシュして表示する必要があります。 –