Noobie, так терпите меня.
Я следил за программированием O'Rielyy Learning для iPhone и различными темами здесь, чтобы создать свое первое приложение для iPhone.Пока все хорошо, но последний камень преткновения в конце проектов - заставить приложение автоматически поворачиваться (бета-версия, использующая только uiwebviews, была отклонена из-за отсутствия автоматического поворота)
У меня есть почтовый делегат приложения, который добавляетUITabBarController
// myNewsUKDelegate.h
@interface myNewsUKDelegate : NSObject <UIApplicationDelegate, UITabBarControllerDelegate> {
UIWindow *window;
UITabBarController *tabBarController;
}
@property (nonatomic, retain) IBOutlet UIWindow *window;
@property (nonatomic, retain) IBOutlet UITabBarController *tabBarController;
@end
// myNewsUKDelegate.m
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
// Add the tab bar controller's view to the window and display.
[self.window addSubview:tabBarController.view];
[self.window makeKeyAndVisible];
return YES;
}
Для tabBarController есть файлы .h и .m - я добавил все контроллеры UINavigationController в IB, которые, в свою очередь, добавляют UITableView
См. Изображение на http://flatearth.co.uk/nib.png (слишком noob, чтобы публиковать изображения в вопросах!)
Из моего прочтения я понимаю, что проблема заключается в UITabBarController, который я добавил в главное представление, должен быть 'subclassed' и добавить этот код.
- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation {
return YES;
}
Следующее представление down / in / subclassed (независимо от правильной терминологии), в котором есть файлы .h и .m, - это FirstViewController, который добавляет представление таблицы, для него должен быть уже установлен флажокAutorotateToInterfaceOrientation.
@interface FirstViewController : UIViewController <UITableViewDataSource, UITableViewDelegate> {
UITableView *tableView;
NSArray *userList;
}
@property (nonatomic, retain) IBOutlet UITableView *tableView;
@property (nonatomic, retain) NSArray *userList;
@end
@implementation FirstViewController
@synthesize tableView;
- (void)viewDidLoad {
[super viewDidLoad];
// I tried adding
self.view.autoresizingMask = UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight;
// lots of other code ; )
}
- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation {
return YES;
}
Таким образом, проблема заключается в том, что когда [self.window addSubview: tabBarController.view];добавляет панель вкладок, но не добавляет shouldAutorotateToInterfaceOrientation, возвращающее бит YES.
Похоже, мне нужно добавить подкласс tabBarController, в котором должен быть mustAutorotateToInterfaceOrientation.Итак, я прочитал и попробовал это, как это было предложено в паутинах ...
// tabBarController.h
#import <UIKit/UIKit.h>
@interface tabBarController : UITabBarController {
}
@end
// tabBarController.m
#import "tabBarController.h"
@implementation tabBarController
- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation {
return YES;
}
@end
и добавив
#import "tabBarController.h"
к myNewsUKDelegate.m
Но это не удается с"ошибка: доступ к неизвестному методу класса 'view'" в строке
[self.window addSubview:tabBarController.view];
в myNewsUKDelegate.m
Дальнейший поиск не дал ничего полезного, и мои последние знания Xcode теперь иссякли: (Любая помощь приветствуется.