【发布时间】:2013-11-19 12:06:40
【问题描述】:
我有两个视图控制器。 ViewController1 和 ViewController2。
在viewController1 中,我创建了一个名为webView 的UIWebView。
这是viewController1.h:
#import "viewController2.h"
@class viewController2
@interface viewController1 : UIViewController <UIWebViewDelegate>
{
...
}
@property (nonatomic, strong)UIWebView *webView;
- (void)goToPerc:(float)perc;
这是viewController1.m:
- (void)viewDidLoad {
...
webView = [[UIWebView alloc] initWithFrame:CGRectMake(0, 0, self.view.frame.size.width, self.view.frame.size.height)];
webView.delegate = self;
webView.scrollView.delegate = self;
[self.view addSubview:webView];
...
}
- (void)goToPerc:(float)perc {
CGPoint scrollToPoint = CGPointMake(0, (int)(self.webView.scrollView.contentSize.height * (perc / 100)));
NSLog(@"%@", webView);
[webView.scrollView setContentOffset:scrollToPoint animated:YES];
}
这是viewController2.h:
#import <UIKit/UIKit.h>
#import "viewController1.h"
@interface viewController2 : UIViewController
{
...
}
这是viewController2.m:
...
- (void)blaBla
{
viewController1 *vc1 = [[viewController1 alloc] init];
float scrollToPerc = 50.0;
[vc1 goToPerc:scrollToPerc];
NSLog(@"%@", vc1); // returns viewController1 in log
}
(void)goToPerc:(float)perc 中的 NSLog(@"%@", webView); 返回 null。而且滚动显然不起作用。为什么? viewController1 中的所有其他函数在 webView 和 viewDidLoad 上不返回 null viewController1 被调用,所以 webView 确实存在!
我也试过self.webView,也没有成功。
【问题讨论】:
-
去协议和委托。搜索、学习和实施。
-
你有一个强大的工具叫做断点。在所有方法中彻底使用它,并检查调用了哪个方法以及出现了什么问题。
-
我认为 viewdidload 在你第一次显示你的视图控制器视图之前不会被调用。
-
viewController1 中的 viewDidLoad 在我调用 [vc1 goToPerc:scrollToPerc] 之前已经被调用;在 viewController2 中。
-
你应该阅读一些关于视图生命周期的文章。
标签: ios objective-c uiwebview