Форум программистов, компьютерный форум CyberForum.ru

Swift

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 10, средняя оценка - 4.90
Eserchik
0 / 0 / 0
Регистрация: 04.06.2012
Сообщений: 21
#1

Запуск нового ViewController из кода - Swift

19.09.2014, 13:58. Просмотров 1350. Ответов 4
Метки нет (Все метки)

Помогите решить проблему!
Есть два контролера Splash и Main (Заставка и основное меню).

Собственно задача из Splash запустить Main.

SplashController(Storyboard ID= SplashBoard)
MainController(Storyboard ID= MainBoard)

Вот код:

Java
1
2
let vc  = self.storyboard.instantiateViewControllerWithIdentifier("MainBoard") as  MainController
self.presentViewController(vc, animated: true, completion: nil)
Но он запускает пустой контролер, без каких либо view элементов
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
19.09.2014, 13:58     Запуск нового ViewController из кода
Посмотрите здесь:
Swift Не работает импорт одного ViewController в другой!
Запуск нового процесса Ruby
Android Не работает If и запуск нового активити
Запуск Windows с нового диска
Запуск неуправляемого кода внутри кода c# C#
C# Отследить запуск нового процесса и завершить его
C# Создание и запуск нового процесса с заданным временем запуска
C Linux запуск нового процуса спомошью execl , передача сообшений не работает
Java Запуск еще одного экземпляра программы как нового процесса.
C++ Builder Подключение нового кода к скомпилированной проге
2 ViewController Objective-C
C# Запуск кода

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
noname_club
102 / 90 / 9
Регистрация: 01.05.2013
Сообщений: 583
19.09.2014, 17:43     Запуск нового ViewController из кода #2
self.presentViewController
Objective-C
1
[self.navigationController pushViewController: vc animated: YES];
При условии что на сторибоарде главным котроллером является UINavigationConroller
Vorona
20.09.2014, 16:12
  #3

Не по теме:

Если сплеш не имеет никакой логики, то лучше использовать стандартные средства - в настройках проекта подставить картинку для стандартного сплеш скрина

Eserchik
0 / 0 / 0
Регистрация: 04.06.2012
Сообщений: 21
22.09.2014, 12:22  [ТС]     Запуск нового ViewController из кода #4
Оказывается новый view controller открывается, но появление всех view элементов происходит через ~40 сек.
Первый контролер получает данные от сервера и после их получения должен запустить 2-й

Вот мой код:

Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
import UIKit
 
 
 
class SplashController: UIViewController {
 
    @IBOutlet weak var ViewIndicator: UIActivityIndicatorView!
    
    override func viewDidLoad() {
        super.viewDidLoad()
 
 
        ViewIndicator.startAnimating()
       
        var request = NSMutableURLRequest(URL: NSURL(string: "http://server.ru/token"))
        
        var session = NSURLSession.sharedSession()
        
        request.HTTPMethod = "POST"
        
 
        
       //var params = ["grant_type":"password", "password":"123456", "username":"installer"] as Dictionary<String, String>
        var params = "grant_type=password&username=installer&password=123456"
        
        var err: NSError?
        
        //request.HTTPBody = NSJSONSerialization.dataWithJSONObject(params, options: nil, error: &err)
        
        request.HTTPBody = params.dataUsingEncoding(NSUTF8StringEncoding);
        
        request.addValue("application/x-www-form-urlencoded", forHTTPHeaderField: "Content-Type")
        request.addValue("UTF-8", forHTTPHeaderField: "charset")
      
        
        
        
        var task = session.dataTaskWithRequest(request, completionHandler: {data, response, error -> Void in
            
            println("Response: \(response)")
            
            var strData = NSString(data: data, encoding: NSUTF8StringEncoding)
            
            println("Body: \(strData)\n\n")
            
            var err: NSError?
            
            //var json = NSJSONSerialization.JSONObjectWithData(data, options: .MutableLeaves, error: &err) as NSDictionary
            
            let json: AnyObject! = NSJSONSerialization.JSONObjectWithData(data, options: NSJSONReadingOptions(0), error: &err)
            
            
            if(err != nil) {
                println(err!.localizedDescription)
                let jsonStr = NSString(data: data, encoding: NSUTF8StringEncoding)
                println("Error could not parse JSON: '\(jsonStr)'")
            }
 
            
            if let json = json as? Dictionary<String, AnyObject> {
                if let success = json["access_token"] as AnyObject? as? String { // Currently in beta 5 there is a bug that forces us to cast to AnyObject? first
                    
                            self.ViewIndicator.stopAnimating()
                    
                            println("Succes: \(success)")
                    
 
            
                    
 
                    
                    //Запускаем новый контроллер
                    let vc:MainController  = self.storyboard.instantiateViewControllerWithIdentifier("MainBoard") as  MainController
                      vc.accessToken = success
                    self.presentViewController(vc as MainController, animated: true, completion: nil)
         
 
                  }
                }
      
            
            
            
            
            })
       
       task.resume()
        
       
 
 
    
 
    }
    
 
    override func didReceiveMemoryWarning() {
        super.didReceiveMemoryWarning()
        // Dispose of any resources that can be recreated.
    }
 
 
}
BigDanceMouse
5 / 5 / 1
Регистрация: 26.01.2014
Сообщений: 69
24.11.2014, 14:37     Запуск нового ViewController из кода #5
Eserchik, Если вам еще это актуально.
У вас используется NSURLSession с completionHandler, который, как я заметил, запускает completion блок на выполнение в тот момент когда ответ от сервера получен. Возможно это связанно с тем, что сам URLSession работает в фоновом потоке, а completion включает действия, для которых обязателен главный поток. Или что-то подобное этому. Я тоже столкнулся с такой проблемой, но правда в менее глобальном масштабе, после чего сразу перенес все в метод делегата URLSession. В моем случае это решило проблему.
Yandex
Объявления
24.11.2014, 14:37     Запуск нового ViewController из кода
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru