Раскадровка - Открыть представление программно - PullRequest
1 голос
/ 15 декабря 2011

В настоящее время я создаю приложение для Iphone, которое использует раскадровки.Я знаю, как открывать новые виды с помощью кнопок с помощью метода ctrl + click и т. Д. У меня проблема в том, что когда пользователь нажимает кнопку, мне нужно выполнить некоторые вычисления и обработку, а также открыть веб-соединение для извлечения данных, чтобыЯ могу заполнить таблицу в следующем представлении, но представление открывается первым, прежде чем я смогу сделать что-либо из этого.

Я сталкиваюсь с тем, что представление загружается задолго до того, как я завершу подключение к веб-службе ирассчитали и сохранили данные для таблицы в следующем представлении, поэтому она загружается пустой.Мне нужно либо вызвать представление в кнопке программно, либо как-то замедлить процессы с каким-то «экраном загрузки», но я тоже не знаю, как это сделать.Я думаю, если это возможно, чтобы заполнить данные в таблице после загрузки представления, это также может работать.(если это возможно)

Буду признателен за любые советы или статьи, которые могут указать мне правильное направление.Сам ничего не нашел.

Спасибо.

- метод подключения -

- (IBAction)connect:(id)sender {
//First begin by logging into the web service.

_email = self.logintxt.text;

//                            ---SOAP 1.1---
//large soap creation.  edited for privacy etc.
NSString *soapMsg = 
[NSString stringWithFormat:@"",_logintxt.text
 ];

//---print it to the Debugger Console for verification---
//NSLog(soapMsg);

NSURL *url = [NSURL URLWithString: 
              @""];
NSMutableURLRequest *req = [NSMutableURLRequest requestWithURL:url];

//---set the headers---
NSString *msgLength = [NSString stringWithFormat:@"%d", [soapMsg length]];

[req addValue:@"" forHTTPHeaderField:@"Host"];
[req addValue:@"text/xml; charset=utf-8" forHTTPHeaderField:@"Content-Type"];
[req addValue:@"" forHTTPHeaderField:@"SOAPAction"];
[req addValue:msgLength forHTTPHeaderField:@"Content-Length"];

//---set the HTTP method and body---
[req setHTTPMethod:@"POST"];
[req setHTTPBody: [soapMsg dataUsingEncoding:NSUTF8StringEncoding]];



NSURLConnection *conn = [[NSURLConnection alloc] initWithRequest:req delegate:self];
if (conn) {
    XMLData = [NSMutableData data];     
}


[self performSelector:@selector(getXMLList) withObject:NULL afterDelay:2.0];
[self performSegueWithIdentifier:@"LoginSegue" sender:sender];

Ответы [ 2 ]

2 голосов
/ 15 декабря 2011

У вас может быть кнопка или любой другой элемент, связанный с методом в вашем контроллере, а внутри метода после обработки вы можете вызвать executeSegueWithIdentifier: , чтобы форсировать переход, когда вы закончите.Это все равно автоматически вызовет prepareForSegue: до появления представления.

Я сделал что-то похожее, чтобы проверить данные для входа на странице входа в моем руководстве здесь .

1 голос
/ 15 декабря 2011

Я могу предложить написать действие кнопки самостоятельно. чтобы достичь этого, вы должны положить вещи в свой .h, как

@interface MyClass : UIViewController {
    IBOutlet UIButton *my_btn;
}

@property (nonatomic, retain) IBoutlet UIButton *my_btn;

- (IBAction)MyBtnTapped:(id)sender;

в вашем .m не забудьте

  @synthesize my_btn;

затем просто свяжите действие с вашей кнопкой, используя IB, и вуаля ' первый шаг сделан.

в вашем .m теперь вы можете реализовать функцию MybtnTapped, которая обрабатывает получение данных, а затем открывает новый UIView, выполненный с вашими новыми данными.

...