iOS (iPhone / iPad) SDK - вкладки в панели вкладок не отображаются - PullRequest
0 голосов
/ 01 августа 2011

Кажется, что вкладки в моей панели вкладок не отображаются.Вот мой код делегата приложения:

(имя приложения) AppDelegate.h:

    #import <UIKit/UIKit.h>

    @class TwitterViewContoller;

    @interface <appname>AppDelegate : NSObject <UIApplicationDelegate> {
        UIWindow *window;
        UITabBarController *rootController;
        TwitterViewContoller *viewController;
        NSMutableData *responseData;
        NSMutableArray *tweets;
    }

    @property (nonatomic, retain) IBOutlet UIWindow *window;
    @property (nonatomic, retain) IBOutlet UITabBarController *rootController;
    @property (nonatomic, retain) IBOutlet TwitterViewContoller *viewController;
    @property (nonatomic, retain) NSMutableArray *tweets;

    @end

(имя приложения) AppDelegate.m:

    #import "<appname>AppDelegate.h"
    #import "TwitterViewContoller.h"
    #import "SBJson.h"

    @implementation <appname>AppDelegate

    @synthesize window = _window;
    @synthesize rootController;
    @synthesize viewController;
    @synthesize tweets;

    #pragma mark -
    #pragma mark Application lifecycle

    - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
        // Override point for customization after application launch. 
        CGFloat width = self.rootController.view.bounds.size.width;
        CGFloat height = self.rootController.view.bounds.size.height;
        UIView *v = [[UIView alloc] initWithFrame:CGRectMake(0.0, 0.0, width, height)];
        UIImage *imageView = [UIImage imageNamed:@"TabBarBackground.png"];
        UIColor *kMainColor = [[UIColor alloc] initWithPatternImage:imageView];

        [v setBackgroundColor:kMainColor];
        [kMainColor release];

        [self.rootController.tabBar insertSubview:v atIndex:0];
        [imageView release];
        [v release];

        responseData = [[NSMutableData data] retain];
        tweets = [NSMutableArray array];

        NSURLRequest *request = [NSURLRequest requestWithURL:
                         [NSURL URLWithString:@"http://api.twitter.com/1/statuses/user_timeline.json?screen_name=USER_NAME_ID"]];

        [[NSURLConnection alloc] initWithRequest:request delegate:self];
                NSAssert(nil != self.rootController, @"tab bar controller not hooked up!");

        self.viewController = [[[TwitterViewContoller alloc] initWithNibName:@"TwitterViewContoller_iPhone" bundle:nil] autorelease];
        self.rootController.viewControllers = [NSArray arrayWithObject:self.viewController];

        // this is now the Right Way to set the root view for your app, in iOS 4.0 and later
        self.window.rootViewController = self.rootController;

        [self.window makeKeyAndVisible];
        return YES;
    }

    #pragma mark NSURLConnection delegate methods
    - (void)connection:(NSURLConnection *)connection didReceiveResponse:(NSURLResponse *)response {
        [responseData setLength:0];
    }

    - (void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data {
        [responseData appendData:data];
    }

    - (void)connection:(NSURLConnection *)connection didFailWithError:(NSError *)error {
    }

    - (void)connectionDidFinishLoading:(NSURLConnection *)connection {
        [connection release];
        NSString *responseString = [[NSString alloc] initWithData:responseData encoding:NSUTF8StringEncoding];
        [responseData release];

        NSArray *allTweets = [responseString JSONValue];
        [viewController setTweets:allTweets];

    }

    - (void)dealloc {
        [_window release];
        [rootController release];
        [viewController release];
        [super dealloc];
    }

    @end

Я считаю, что проблема заключается вв application didFinishLaunchingWithOptions: единственными недавними изменениями, которые я внес в App Delegate, были следующие строки:

    NSAssert(nil != self.rootController, @"tab bar controller not hooked up!");

    self.viewController = [[[TwitterViewContoller alloc] initWithNibName:@"TwitterViewContoller_iPhone" bundle:nil] autorelease];
    self.rootController.viewControllers = [NSArray arrayWithObject:self.viewController];

    // this is now the Right Way to set the root view for your app, in iOS 4.0 and later
    self.window.rootViewController = self.rootController;
    [self.window makeKeyAndVisible];

(РЕДАКТИРОВАТЬ: удаление 2-й и 3-й строки выше устраняет проблему, но мне нужно их иметь).Есть идеи?

1 Ответ

0 голосов
/ 01 августа 2011

Создайте свойство из ваших других ViewControllers и синтезируйте их в вашем файле реализации (.m).Также импортируйте их в свой файл AppDelegate.m.Вот как будет выглядеть ваш заголовочный файл (.h) (rootController - это ваш TabBarController):

    #import <UIKit/UIKit.h>

    @class TwitterViewContoller;
    @class OtherViewController;

    @interface <appname>AppDelegate : NSObject <UIApplicationDelegate> {
        UIWindow *window;
        UITabBarController *rootController;
        TwitterViewContoller *viewController;
        OtherViewController *viewController1;
    }

    @property (nonatomic, retain) IBOutlet UIWindow *window;
    @property (nonatomic, retain) IBOutlet UITabBarController *rootController;
    @property (nonatomic, retain) IBOutlet TwitterViewContoller *viewController;
    @property (nonatomic, retain) IBOutlet OtherViewController *viewController1;

    @end

И первые несколько строк файла вашей реализации (.m):

#import "<appname>AppDelegate.h"
#import "TwitterViewContoller.h"
#import "OtherViewController.h"

@implementation <appname>AppDelegate

@synthesize window = _window;
@synthesize rootController;
@synthesize viewController;
@synthesize viewController1;

Добавьте дополнительные ресурсы для всех ваших ViewControllers:

self.viewController = [[[TwitterViewContoller alloc] initWithNibName:@"TwitterViewContoller_iPhone" bundle:nil] autorelease];
self.viewController1 = [[[SecondViewController alloc] initWithNibName:@"SecondViewController_iPhone" bundle:nil] autorelease];

Затем замените это:

self.rootController.viewControllers = [NSArray arrayWithObject:self.viewController];

на это:

self.rootController.viewControllers = [NSArray arrayWithObjects:self.viewController, self.viewController1, nil];

Это так, что выможно добавить более одного UIViewController в ваш контроллер TabBar.

Затем, конечно, отпустите:

[viewController release];
[viewController1 release];

И в каждом классе для ваших ViewControllers, в методе -initWithNibName добавьте это внутриif (self) оператор:

UITabBarItem *tabBarItem = [self tabBarItem];
UIImage *tabBarImage = [UIImage imageNamed:@"IMAGE NAME.png"];
[tabBarItem setImage:tabBarImage];
[tabBarItem setTitle:@"TITLE GOES HERE"];

Запустите ваше приложение, и оно должно работать сейчас!

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