Chr*_*s S 25 iphone viewdidload xamarin.ios viewdidappear viewwillappear
我试图从Apple的粗略文档中找出哪种方法是初始化并将我的Views控件添加到控制器视图的最佳位置.
使用winforms它是相当简单的,因为它们总是在内部初始化InitializeDesigner,在构造函数中调用.如果可能的话,我正试图匹配这种模式的可靠性.
我工作UIViewControllers和UITableViewControllers内部的UINavigationController,如果这影响了一切-大部分时间.
这是一个例子:
public MyController()
{
// Here?
AddViews();
}
public override ViewDidLoad()
{
base.ViewDidLoad();
// Or is should it be here?
AddViews();
}
public override ViewWillAppear(bool )
{
base.ViewWillAppear(animated);
// Here?
AddViews();
}
public override ViewDidAppear(bool animated)
{
base.ViewDidLoad(animated);
// Or maybe here?
AddViews();
}
void AddViews()
{
UILabel label = new UILabel();
label.Text = "Test";
label.Frame = new RectangleF(100,100,100,26);
View.AddSubView(label);
UIWebView webview = new UIWebView();
webview .Frame = new RectangleF(100,100,100,26);
View.AddSubView(webview);
}
Run Code Online (Sandbox Code Playgroud)
当我将它们添加到不同位置的视图时,我得到了一些UIControl的混合结果.有时视觉滞后,其他时候webview被隐藏了.
是否有保留添加它们的一般规则?
Edu*_*coz 73
一般来说,这就是我所做的:
ViewDidLoad - 每当我将控件添加到应该与视图一起出现的视图时,我就把它放在ViewDidLoad方法中.基本上,只要将视图加载到内存中,就会调用此方法.例如,如果我的视图是带有3个标签的表单,我会在这里添加标签; 没有这些形式,视图永远不会存在.
ViewWillAppear:我通常只使用ViewWillAppear来更新表单上的数据.因此,对于上面的示例,我将使用它来实际将数据从我的域加载到表单中.创建UIViews是相当昂贵的,你应该尽可能避免在ViewWillAppear方法上这样做,因为当它被调用时,这意味着iPhone已经准备好向用户显示UIView,你在这里做的任何重量将以非常明显的方式影响性能(如动画延迟等).
ViewDidAppear:最后,我使用ViewDidAppear来启动需要很长时间才能执行的新线程,比如执行webservice调用以获取上面表单的额外数据.好处是因为视图已经存在并且正在向用户显示,您可以在获取数据时向用户显示一条漂亮的"等待"消息.
不过,你可以使用其他技巧.假设您希望UILabel在加载表单后"飞"到表单中.在这种情况下,我会将标签添加到ViewDidLoad中的表单,但在视图区域外面有一个Frame,然后在ViewDidAppear中我会做动画将它飞回到视图中.
希望能帮助到你.
嗯,Apple的文档似乎很清楚,恕我直言.
如果以编程方式创建自己的根视图(此特定控制器的视图层次结构的根视图),则应在-loadView不调用的情况下创建它,super并view在完成后设置该属性.如果您的视图是从笔尖加载的,则不应触摸-loadView.
您可以将自定义子视图添加到视图控制器的视图中,或以其他方式对其进行修改-viewDidLoad.建议的做法是创建您的UILabel和UIWebView -viewDidLoad并将其释放-viewDidUnload,nil如果您需要将它们保存在ivars 中,请设置它们的引用.
注意:-viewDidUnload在iOS 6中已弃用,并且不再被调用,因为UIViewController在内存压力下不再清除其视图.
| 归档时间: |
|
| 查看次数: |
17409 次 |
| 最近记录: |