2014-02-15 2 views
0

У меня есть webView в моем firstViewController. Я разрешаю пользователю изменять некоторые аргументы в URL-адресе в другом viewController (secondViewController).Вид не загружается после уклонения ViewControllerAnimated

Я представляю этот контроллер второго представления, чтобы позволить пользователю сделать это. Когда он закончил (он нажимает кнопку «done» и вызывает функцию rejectViewControllerAnimated), Я хотел бы получить изменения url и загрузить его в viewViews webView. Но webView, похоже, не загружается ... это проблема.

Вот пример.

firstViewController.h:

....... 
#import "SecondViewController.h" 
..... 
@property (strong, nonatomic) IBOutlet UIWebView *webView; 
..... 

firstViewController.m:

@synthesize webView; 

SecondViewController *csvc = [self.storyboard instantiateViewControllerWithIdentifier:@"second"]; 
csvc.OLDurlInWebView = webView.request.URL.absoluteString; 
csvc.modalTransitionStyle = UIModalTransitionStyleCoverVertical; 
[self presentViewController:csvc animated:YES completion:nil]; 
...... 
...... 
...... 
//I'm calling this method after dismissViewControllerAnimated from secondViewControllerClass 
-(void)showInView:(NSString *)str { 
    [self view]; 
    [self loadView]; 
    [self view]; 
    [self openURL:[NSURL URLWithString:str]]; 
    UIActionSheet *sheet = [[UIActionSheet alloc]initWithTitle:@"TEST" delegate:nil cancelButtonTitle:@"TEST" destructiveButtonTitle:nil otherButtonTitles:@"TEST", nil]; 
    NSLog(@"current:%@ isLoaded:%d",webView.request.URL.absoluteString,self.isViewLoaded); //output 'current:(null) isLoaded:1' 
    [sheet showInView:self.view];//this sheet test will not show, the app will crash:'Sheet can not be presented because the view is not in a window:.......' 
} 
-(void)openURL:(NSURL *)url { 
    NSMutableURLRequest *request = [[NSMutableURLRequest alloc] initWithURL:url]; 

    NSLog(@"Trying to open %@ in webbrowser", url); 

    [webView loadRequest:request]; 

} 

secondViewController.h:

....... 
#import "FirstController.h" 
....... 
@interface SecondViewController : UIViewController { 
NSString *OLDurlInWebView; 
....... 
} 
....... 
@property (strong, nonatomic) NSString *OLDurlInWebView; 
- (IBAction)doneButton:(id)sender; 
....... 

secondViewController.m:

@synthesize OLDurlInWebView; 

...... 
- (IBAction)doneButton:(id)sender { 
    [self dismissViewControllerAnimated:NO/*YES*/ completion:nil]; //completion??? 
} 
-(void)viewDidDisappear:(BOOL)animated { 
    NSLog(@"SecondViewC didDisappear"); 
    WebViewController *wb = [self.storyboard instantiateViewControllerWithIdentifier:@"web"]; 

    NSString *newurl = @"http://facebook.com"; //let the user load facebook as example 
    [wb view]; 
    [wb loadView]; //testing everything, nothing works 
    [wb view]; 

    [wb performSelector:@selector(showInView:) withObject:newurl afterDelay:5];//the webView will not load after 5 seconds. Why? 
} 

Хорошо, с самого начала:

В firstViewController:

Я представляю на secondviewcontroller.

Сейчас мы находимся в secondViewController:

Теперь пользователь изменит URL, но в этом примере он изменит URL на facebook.com.

Теперь мы отправим этот новый url (facebook.com) в firstViewController. Пользователь нажимает кнопку doneButton и вызывается функцияОтслеживаниеViewAnimated.

В попытке вернуться к первому контроллеру с этим новым URL-адресом (facebook).

Я проверил все, что знаю, чего недостаточно. Я тестировал вызов нормальной функции в firstViewController из secondViewController. WebView не сможет загружать запросы.

Затем я протестировал, чтобы ввести код в viewDidDisappear и дать 5 секунд для загрузки, но он не работает.

У меня была эта проблема некоторое время назад, когда мое приложение обрабатывает ссылку схемы URL в делегате приложения. - (BOOL) application: (UIApplication *) application handleOpenURL: (NSURL *) url например, если вы не хотите загружать другой webView/метку с URL-адресом или текстом по ссылке схемы URL? Как это сделать из делегата приложения? это та же проблема, что и выше.

Что я делаю неправильно/что я не знаю? Как «подождать» для загрузки, а затем загружать, например, webView с URL-адресом.?

ответ

0

Отклонение должно быть вызвано первым VC. Вы можете сделать это со второй так:

[self.presentingViewController dismissViewControllerAnimated:YES completion:nil]; 

Кроме того, чтобы получить информацию обратно, вы можете использовать делегат или недвижимость в первом виде:

вызовов до увольнения:

[self.presetingViewController setMyProperty:urlToPassBack]; 
+0

[self.presetingViewController setMyProperty:]; не существует ... –

+0

setMyProperty будет свойством на presetingViewController. Вы бы определили его, когда вы подклассифицируете UIViewController, а затем используете его как представляющий viewController. –

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