У меня есть приложение, использующее контроллер табуляции. Однако прежде чем я хочу, чтобы контроллер табуляции загружался, я хочу, чтобы пользователь ввел экран, который позволяет им сначала ввести свой номер телефона, поскольку мне нужно сохранить номер телефона пользователя для использования в приложении. Я сохраняю номер в приложении, как это.iPhone refresh AppDelegate
[[NSUserDefaults standardUserDefaults] setInteger:1234 forKey:@"PhoneNumber"];
В основном, когда они сначала введите приложение, откроется окно, которое позволит им сохранить ввести номер в текстовом поле и сохраняются с помощью NSUserDefaults.
В AppDelegate, у меня есть, если заявление, чтобы проверить, если значение хранится или не нравится этот
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];
NSInteger phoneNumber=[[NSUserDefaults standardUserDefaults] integerForKey:@"PhoneNumber"];
if(phoneNumber == 0){
//So this is the window which allow them to enter their phone number
UIViewController *phoneNumberVC = [[PhoneNumberVC alloc] initWithNibName:@"PhoneNumber" bundle:nil];
UIViewController *phoneNumberRootVC = [[UINavigationController alloc] initWithRootViewController:phoneNumberVC];
self.window.rootViewController = phoneNumberRootVC;
[self.window makeKeyAndVisible];
}else{
//Code here sets up tab controller and all the tabs etc
}
}
Теперь код работает отлично, за исключением того, что после того, как номер сохранен, у меня есть, кроме для выхода из симулятора и повторного запуска, а затем появятся экраны вкладок. Тем не менее, я хочу, чтобы контроллер табуляции загрузился, как только пользователь нажал кнопку на экране номера телефона, чтобы сохранить номер. Текущий метод на экране телефонного номера:
-(IBAction)testing{
NSString *st = [phoneTF text];
NSInteger pn = [st intValue];
NSString *display = [NSString stringWithFormat:@"%i", pn];
[[NSUserDefaults standardUserDefaults] setInteger:pn forKey:@"PhoneNumber"];
UIAlertView * alert = [[UIAlertView alloc] initWithTitle:@"Warning"
message:display
delegate:self
cancelButtonTitle:@"Okay"
otherButtonTitles:nil];
[alert show];
}
Предупреждение предназначено только для тестирования. Поэтому после нажатия кнопки я хочу, чтобы контроллер табуляции загружался в делегат приложения. В любом случае я могу обновить приложение или делегат приложения?
Был бы очень признателен, если бы кто-то мог указать мне в правильном направлении !!!
EDIT
Пробовал
[self.navigationController pushViewController:app.tabBarController animated:YES];
Но как tabBarController еще не инициализирован, он не будет работать
Консоль ошибок
Application tried to push a nil view controller on target <UINavigationController: 0x8056d40>.
Так что мне нужно, чтобы запустить AppDelegate снова, так что контроллер табуляции и все его представления будут инициализированы
Этот код является штраф, если вы просто хотите, чтобы открыть новый XIB, но мне нужно, чтобы открыть вкладку контроллера. Контроллер табуляции и все экраны вкладок настроены в AppDelegate, а не в PhoneNumberVC. Поэтому моя проблема заключается в том, как мне снова получить доступ к AppDelegate и запустить код оттуда. Экран номера телефона не является частью контроллера табуляции, это просто нормальный вид – AdamM
См. Мой обновленный ответ. Работает ли это для вас? – sch
К сожалению, нет. Вы оператор if в делегате приложения означает, что контроллер табуляции никогда не инициализируется до тех пор, пока пользователь не сохранит их номер на экране телефонного номера. После этого мне нужно снова запустить код делегирования приложения, чтобы был настроен контроллер навигации на вкладке. Посмотрите на мое редактирование, чтобы увидеть, что я пробовал. – AdamM