2011-01-11 9 views
4

私はthisチュートリアルを使い、iPhoneのフォトギャラリーを作成しました。今私はそれを私のTabBarプロジェクトに追加したいと思います。私はすでに、Three20はXIBをサポートしていないと聞いていたので、タブバー全体のセットアップをプログラム的に変更しました。私は最終的な解決策からあまり遠く離れていないと思う。TabBarのThree20 iPhoneフォトギャラリーのサポート

写真ギャラリーを1つのタブで機能させることはできましたが、機能はありません(写真をクリックすると開くなど)。ページ上部には、詳細画像ページに移動するナビゲーションはありません。

// Override point for customization after application launch 
TTNavigator* navigator = [TTNavigator navigator]; 
TTURLMap* map = navigator.URLMap; 
[map from:@"demo://album" toViewController: [AlbumController class]]; 

[navigator openURLAction:[TTURLAction actionWithURLPath:@"demo://album"]]; 
return YES; 

私がそうでなければ全体のタブバーが示されていないので、それを削除する必要がありました:私はアプリデリゲートにdidFinishLaunchingWithOptions-方法からこれを削除するとき、私はこれに直面しました。フォトギャラリーは画面全体を使用します。私はそれが表示されていないか、読み込まれていないかどうかはわかりません。私も試みた:

tabbar.hidesBottomBarWhenPushed = NO; 

しかし、それはまったく機能しませんでした。結果を出さずにloadControl()、viewDidLoad()、init()にTTNavigatorコードを追加しようとしました。誰でも私はそれを働かせるためにこれを置く必要があるか知っていますか?

マイAlbumController.h:

#import <Foundation/Foundation.h> 
#import <Three20/Three20.h> 

@interface AlbumController : TTThumbsViewController { 
    // images 
    NSMutableArray *images; 

    // parser 
    NSXMLParser * rssParser; 
    NSMutableArray * stories; 
    NSMutableDictionary * item; 
    NSString * currentElement; 
    NSMutableString * currentImage; 
    NSMutableString * currentCaption; 
} 

@property (nonatomic, retain) NSMutableArray *images; 

@end 

そしてdidFinishLaunchingWithOptions-方法の私の実装:

答えて

6

Bryanの助けを借りて、私は写真ギャラリーをタブバーアプリケーションで稼働させることができました。私はこのソリューションを探している多くの人々を見てきましたので、私はそれを私ができるほど良いものとして説明しようとしています。

Interface BuilderでThree20を使用することはできないようですので、タブバーアプリケーションを手動で設定する必要があります。

#import <UIKit/UIKit.h> 
#import <CoreData/CoreData.h> 
#import "AlbumController.h" 
#import "SecondViewController.h" 
#import "FirstViewController.h" 

@class TabBarAppViewController; 
@class AlbumController; 
@class SecondViewController; 
@class FirstViewController; 

@interface Three20PhotoGalleryAppDelegate : NSObject <UIApplicationDelegate> { 

    UIWindow *window; 
    UITabBarController *tabBarController; 
    AlbumController *albumController; 
    FirstViewController *firstViewController; 
    SecondViewController *secondViewController; 

@private 
    NSManagedObjectContext *managedObjectContext_; 
    NSManagedObjectModel *managedObjectModel_; 
    NSPersistentStoreCoordinator *persistentStoreCoordinator_; 
} 

@property (nonatomic, retain) IBOutlet UIWindow *window; 
@property (nonatomic, retain) UITabBarController *tabBarController; 
@property (nonatomic, retain) AlbumController *albumController; 
@property (nonatomic, retain) SecondViewController *secondViewController; 
@property (nonatomic, retain) FirstViewController *firstViewController; 

@property (nonatomic, retain, readonly) NSManagedObjectContext *managedObjectContext; 
@property (nonatomic, retain, readonly) NSManagedObjectModel *managedObjectModel; 
@property (nonatomic, retain, readonly) NSPersistentStoreCoordinator *persistentStoreCoordinator; 

- (NSURL *)applicationDocumentsDirectory; 
- (void)saveContext; 

@end 

は、新しいUITabBarControllerだけでなく、すべてのあなたのViewControllersを作成することを確認してください:これは私のThree20PhotoGalleryAppDelegate.hです。のは、私のThree20PhotoGalleryAppDelegate.mを続けてみましょう:

#import "Three20PhotoGalleryAppDelegate.h" 
#import "AlbumController.h" 
#import "SecondViewController.h" 
#import "FirstViewController.h" 
#import <Three20/Three20.h> 

@implementation Three20PhotoGalleryAppDelegate 

@synthesize window; 
@synthesize albumController; 
@synthesize firstViewController; 
@synthesize secondViewController; 
@synthesize tabBarController; 

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {  

    // set up tab bar controller manually 
    tabBarController = [[UITabBarController alloc] init];   
    albumController = [[AlbumController alloc] init]; 
    firstViewController = [[FirstViewController alloc] init]; 
    secondViewController = [[SecondViewController alloc] init]; 

    /* This is the essential part of the solution. You have to add the albumController to a 
    new navigation controller and init it as RootViewController*/ 
    UINavigationController* navController = [[[UINavigationController alloc] initWithRootViewController:albumController] autorelease]; 

    // now add all controllers to the tabBarController 
    tabBarController.viewControllers = [NSArray arrayWithObjects:firstViewController, secondViewController, navController, nil];  

    [window addSubview:tabBarController.view];            
    [window makeKeyAndVisible]; 
} 

- (BOOL)application:(UIApplication*)application handleOpenURL:(NSURL*)URL { 
    TTOpenURL([URL absoluteString]); 
    return YES; 
} 

- (void)dealloc { 
    [tabBarController release]; 
    [window release]; 
    [super dealloc]; 
} 

@end 

はチュートリアルからTTNavigatorのものを必要としないことに注意してください。今私たちはフォトギャラリーをどうやって取得しなければなりません。チュートリアルのようにAlbumControllerでビルドしました。これは私のAlbumController.hです:

#import <Foundation/Foundation.h> 
#import <Three20/Three20.h> 

@interface AlbumController : TTThumbsViewController { 

} 

@property (nonatomic, retain) NSMutableArray *images; 

@end 

上記のチュートリアルでは、AlbumControllerの実装を見つけることができます。今度はAlbumController.m:

#import "AlbumController.h" 
#import "PhotoSource.h" 
#import "Photo.h" 

@implementation AlbumController 
@synthesize images; 

- (id)init 
{ 
    if (self = [super init]) 
    { 
     // Initialization code 
     self.title = @"Photo Gallery"; 
     self.hidesBottomBarWhenPushed=NO; 
    } 
    return self; 
} 


- (void)viewDidLoad { 

    [self createPhotos]; // method to set up the photos array 
    self.photoSource = [[PhotoSource alloc] 
         initWithType:PhotoSourceNormal 
         title:@"All in Vain" 
         photos:images 
         photos2:nil]; 
} 

-(void)createPhotos { 
    // your independent implementation 
} 

@end 

上記の問題の説明にあるように、私のフォトギャラリーは常にフルスクリーンを使用していました。もうタブバーアイコンを使用できないため、これは悪いことです。このためには、上記のAlbumController-init-methodで説明したように、init()メソッドに

self.hidesBottomBarWhenPushed=NO; 

を追加する必要があります。

Sooo、それはかなりです。誰かが自分のソリューションを再利用できることを本当に願っています。ブライアンにもう一度感謝します。

乾杯のみんな、 doonot

PS:私はgithubの上のプロジェクトを作成しました。サンプルアプリケーションhereをダウンロードできます。

+0

dooonot、フォトギャラリー+タブバーのサンプルコードがありますか? –

+0

https://github.com/doonot/TTThumbsViewController-in-a-TabBar-App – doonot

0

dooonot

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {  

    // set up tab bar controller 
    tabBarController = [[UITabBarController alloc] init];   
    albumController = [[AlbumController alloc] init]; 
    firstViewController = [[FirstViewController alloc] init]; 
    secondViewController = [[SecondViewController alloc] init]; 
    firstViewController.delegateRef = self; 
    tabBarController.viewControllers = [NSArray arrayWithObjects:firstViewController, secondViewController, albumController, nil]; 
    [window addSubview:tabBarController.view];            
    [window makeKeyAndVisible]; 

    // Override point for customization after application launch 
    TTNavigator* navigator = [TTNavigator navigator]; 
    TTURLMap* map = navigator.URLMap; 
    [map from:@"demo://album" toViewController: [AlbumController class]]; 
    [navigator openURLAction:[TTURLAction actionWithURLPath:@"demo://album"]]; 
    return YES; 
} 

みんなありがとう、乾杯は、これを試してみてください。

tBarController = [[UITabBarController alloc] init]; 
actionController = [[ActionController alloc] initWithNibName:nil bundle:nil]; 
    // Override point for customization after application launch. 
    TTNavigator* navigator = [TTNavigator navigator]; 
TTURLMap* map = navigator.URLMap; 
[map from:@"demo://album" toViewController:tBarController]; 
[tBarController setViewControllers: 
    [NSArray arrayWithObjects:actionController,nil]]; 
[navigator openURLAction:[TTURLAction actionWithURLPath:@"demo://album"]]; 

[self.window addSubview:tBarController.view]; 
[self.window makeKeyAndVisible]; 

    return YES; 
+0

こんにちはブライアン、ありがとう、あなたの答えです。あなたのコードを試しましたが、ページの下部に黒いバーが表示された白い画面しか表示されません。コードを修正しようとしましたが、解決できませんでした。他のアイデア? :( – doonot

+0

私はTwitterであなたのつぶやきを得ました:)。あなたは、AlbumController/ActionControllerはUITabViewControllerである必要があると言っています。私は上記のチュートリアルのAlbumControllerのコードを使用しています。このチュートリアルでは、写真アプリケーションのようにサムネイルを表示したいので、TTThumbsViewControllerを使用します。タブアイコンの下に「通常の」ビューを表示するには全く問題ありません... – doonot

+0

私が今話す限り、私はAlbumControllerが正しく呼び出されたと思いますが、タブバーは下部に隠れていると思いますページ!私は試した[self.hidesBottomBarWhenPushed = NO]; [self.wantsFullScreenLayout = NO];しかし成功なし! – doonot

0

TTNavigatorDemoサンプルを使用して、タブバーコントローラーでの使用方法を知ることができます。

関連する問題