Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/iphone/36.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
iPhone上类似Web的标签_Iphone_Uiview_Uiviewcontroller_Xamarin.ios - Fatal编程技术网

iPhone上类似Web的标签

iPhone上类似Web的标签,iphone,uiview,uiviewcontroller,xamarin.ios,Iphone,Uiview,Uiviewcontroller,Xamarin.ios,在iPhone上实现类似web应用程序的选项卡的最佳方法是什么,如下面的屏幕截图(注意“签入信息朋友”选项卡)?这些不是UIKit标准库的一部分,但最近似乎非常普遍 我花了相当多的时间为iPhone开发应用程序,但没有开发像那样的控件。这里最好的方法是什么: 为每个选项卡内容创建一个新的UIView,并立即将三个子视图添加到mainview 是否仅在用户单击每个选项卡时创建新的UIView 将所有内容放在UIScrollView中,并在用户单击每个选项卡时更改页面 也许有开源的控件在那里?我

在iPhone上实现类似web应用程序的选项卡的最佳方法是什么,如下面的屏幕截图(注意“签入信息朋友”选项卡)?这些不是UIKit标准库的一部分,但最近似乎非常普遍

我花了相当多的时间为iPhone开发应用程序,但没有开发像那样的控件。这里最好的方法是什么:

  • 为每个选项卡内容创建一个新的UIView,并立即将三个子视图添加到mainview
  • 是否仅在用户单击每个选项卡时创建新的UIView
  • 将所有内容放在UIScrollView中,并在用户单击每个选项卡时更改页面
也许有开源的控件在那里?我什么也找不到



(来源:)

我解决类似问题的方法是创建所有4个(在我的例子中)选项卡视图,但对didReceiveMemoryWarning的响应是释放除当前选项卡视图以外的所有选项卡视图。(当然,您必须确保在用户选择新选项卡时创建了新视图(如果它不存在的话)


我认为这是一个很好的折衷方案——首先是对用户的快速反应(在我的例子中,内存占用在我的应用程序的这一点上是最低的),然后是对内存不足的反应,以避免被射杀。

我认为最好只对父视图或视图控制器中的子视图进行三次UIView*引用,所有引用最初都为空,然后,让子例程隐藏其他两个视图(如果它们可见),然后构造并显示或仅显示新视图。假设没有特别的内存需求

我认为,对于如此小的屏幕区域,子视图级别的加载/卸载问题不太可能成为问题,但是如果需要加载/卸载父视图,子视图应该全部消失(隐藏和卸载),并且在重新加载时,loadView应该在启动时调用上一段中描述的例程

如果三个子视图中的任何一个子视图实际上占用了大量内存或资源,那么我的建议是相反的,并且每个子视图和/或它们后面的任何内存密集型对象不仅应该隐藏,而且应该尽可能地卸载。我认为,如果你在那里使用谷歌地图,那么在隐藏时卸载的需要可能适用于这一点


这是正确的观点吗?我还缺少一些额外的细节吗?

您可以让每个选项卡成为一个真正的视图控制器,其中包含nib和所有内容。唯一需要注意的是,您必须转发想要接收的标准视图控制器调用(ViewWillDisplay,等等),但这会使编码更加清晰,因为您的编码方式与其他任何视图相同(尽管空间较小)


您可以调用每个控制器的“视图”属性以获取视图,并将其添加为选项卡下的容器视图的子视图。

如果这三个视图都是表视图,则可以使用一个基于所选选项卡更改内容的
UITableViewController
。否则,我支持KHG关于使用真实视图控制器备份每个子视图的评论


对于选项卡本身考虑子类<代码> UISEGMENTIDE控件< /代码> . 谢谢你的回答,弗兰克。不是所有的视图都是表,我应该提到这一点。关于UISegmentedControl的好主意。嗨,Frank,我不知道如何将UISegmentedControl子类化并替换绘图方法,以输出我自己的图像。。你知道我应该重写哪个方法吗?我没有太多(嗯,任何)将UI元素子类化的经验。您可以覆盖

drawRect
方法,使用
[super widthForSegmentAtIndex]
获取宽度,并使用
[super selectedSegmentIndex]
找出要突出显示的宽度。您还可以遍历子视图树,并告诉任何UILabel自行绘制。但我不确定在进入未记录的API拒绝领域之前你能走多远。所以你会有一个tabviewcontroller,但有4个视图,每个视图包括“think coffee”和选项卡(上图)?在你的情况下,我会有一个tabview控制器,一个基本视图和“think coffee”然后在屏幕下部显示3个较小的选项卡视图,每个选项卡一个。(如果选项卡视图不是全屏的,则可以节省内存。)(虽然这个决定对我来说很简单,因为我的每个选项卡视图都只有一些按钮-所以对所有选项卡视图使用相同的视图控制器很简单-逻辑只是简单的按钮操作方法。)谢谢,Jane。毕竟我在做类似的事情。看来会有用的。你知道我如何将按钮或UISegmentedControl的外观设计成上面的选项卡吗?