2012-02-07 2 views
50

Может кто-нибудь более осведомленный, чем я объясняю performSegueWithIdentifier:sender: для меня? Мне нужно переключать представления (и классы), а также переносить несколько NSStrings и ID на класс этого представления. Мне было интересно, возможно ли это с performSegueWithIdentifier:sender:Понимание performSegueWithIdentifier

Спасибо!

ответ

77

Во-первых, вы должны настроить segue в своем раскадровке и присвоить ему соответствующий идентификатор. (Нажмите на SEGUE (левую панель), а затем нажмите на атрибутах (правую панель).

Вы можете связать это с кнопками или выбором строк таблицы из раскадровки, или вы можете вызвать его в коде с помощью performSegueWithIdentifier:sender:.

После этого, ваш контроллер представления будет отправлено prepareForSegue:sender: сообщения Вы переопределить этот метод в виде контроллера подклассе, и можете настроить контроллер представления целевого следующим образом:..

TargetViewController *targetVC = (TargetViewController*)segue.destinationViewController; 
targetVC.string1 = string1; 

и так далее sender в этот метод будет объектом, который вы используете как sender в исходном вызове метода.

+0

Спасибо! Это на самом деле объяснялось много! :) –

+0

Я сделал (Myclass *) nextViewController = segue.destinationViewController; nextView.textfield1.text = @ "Test"; , но xcode имеет проблемы с (Myclass *) nextViewController –

+0

MyClass должен быть подклассом UIViewController. Segues предназначены для новых диспетчеров представлений, а не для представления. – jrturton

3

В prepareForSegue:sender: у вас есть возможность сконфигурировать destinationViewController: вот где вы передадите ему нужные ему данные. Это обсуждается в Cocoa Application Competencies for iOS.

+0

Спасибо за ссылку и информацию, я прочитаю через нее. Оцените свои усилия. –

9

Большинство сеансов инициируются автоматически в результате взаимодействия с пользователем. Например, если у вас есть segue, который подключен от кнопки к сцене в раскадровке, при нажатии кнопки будет автоматически инициироваться segue.

Иногда имеет смысл запускать программный вызов segue - например, вы имеете сцену с высокими показателями, которая отображается, когда пользователь выигрывает раунд игры. Невозможно выразить концепцию выигрыша в самой раскадровке, поэтому вместо этого вы можете создать segue, назначить ему идентификатор и вызвать во время выполнения -performSegueWithIdentifier:sender:.

Другой метод, связанный с segue на UIViewController, -prepareForSegue:sender:, - это метод, который вы должны переопределить для выполнения любой настройки на контроллере представления назначения.

+0

очень хорошее объяснение. –

-1

Сегодня я столкнулся с проблемой performSegueWithIdentifier: не выполняется из-за того, что не задал очередь делегатов в моем сеансе URL.

Так что, если вы действительно установите очередь делегатов при создании URLSession, иначе URLSession создаст его.

urlSession = [NSURLSession sessionWithConfiguration:sessionConfigObject 
              delegate:self 
             delegateQueue:[NSOperationQueue mainQueue]]; 

Я упоминаю об этом здесь, потому что довольно часто вижу, что обработка URLSession вызывает вызов какой-либо деятельности, связанной с пользовательским интерфейсом. И performSegue должен выполняться на основном, иначе он ничего не сделает.

Смежные вопросы