iOS嵌套视图层次结构,支持拖放功能,允许最终用户配置表单

iOS嵌套视图层次结构,支持拖放功能,允许最终用户配置表单,第1张

概述我正在构建一个原生的iOS应用程序,允许最终用户通过从自定义控件的工具箱中拖放来构建表单.一个典型的场景是高级用户在UIView上拖动一些UILabel和UITextField表示.将支持控件组,允许在一个部分中可视地包含多个控件.整个事情可能会包含在UIScrollView中,允许在“页面​​”之间进行水平滚动. 然后,“普通”用户将使用该表单进行数据输入. 所以,我有两个相关的要求:允许布局和 我正在构建一个原生的iOS应用程序,允许最终用户通过从自定义控件的工具箱中拖放来构建表单.一个典型的场景是高级用户在UIVIEw上拖动一些UILabel和UITextFIEld表示.将支持控件组,允许在一个部分中可视地包含多个控件.整个事情可能会包含在UIScrollVIEw中,允许在“页面​​”之间进行水平滚动.

然后,“普通”用户将使用该表单进行数据输入.

所以,我有两个相关的要求:允许布局和分组不同类型的UIVIEw / UItableVIEw / UIImageVIEw / UILabelVIEw / UITextFIEld等(并且可能包含在外部UIScrollVIEw中),并允许调整/拖动布局/被高级用户丢弃.

我的问题相当广泛,但基本上是这样的:支持这两个相关要求的最合适的嵌套UIVIEw层次结构是什么?如果我想在UItableVIEw中的嵌套视图中拖放,那么外部UIScrollVIEw中包含的UItableVIEws的基本结构是否基本上是合理的?我应该避免使用UItableVIEw,因为它会使拖动变得复杂吗?

我很欣赏这个问题在范围上是主观的,但是我真的很感激那些之前曾经说过这种事并且对我有一些智慧的人的指导.

非常感谢.

解决方法 听起来像一个有趣的应用程序!我会说使用UItableVIEw会使应用程序变得非常复杂. UIScrollVIEw将是一个很好的拖放控件的基础.也许使用“添加页面”按钮,用户可以点击它所需的,并且您可以将UIScrollVIEw的contentSize扩展为1页的宽度,然后滚动它以便用户可以将更多控件拖到该页面上.

要拖动控件,可以使用附加到每个控件的UIPanGestureRecognizer,并在触发时更改控件的中心位置.您可能需要关闭某些控件的用户交互 – 例如对于UITextFIEld,超级用户希望将其拖动但不想在其中输入值.

对于分组控件,您可以执行以下 *** 作:

>“组模式”,用户点击按钮进入此模式,然后点击一些控件(需要一些视觉指示,以显示它们被选中),然后点击完成.
>然后从UIScrollVIEw中删除所选的控件
>创建一个新的UIVIEw并将其定位在所选控件的中心点,并且足够大,使控件能够以相同的距离分开.它被添加为滚动视图的子视图
>控件全部添加为此视图的子视图
>手势识别器已添加到此视图中,而不是单个控件.然后在拖动时,这组控件将作为具有固定布局的组移动.

如果您认为可能常用的控件组,您甚至可以预先创建它们,每个控件都在自己的笔尖中,然后允许用户将它们作为预制组拖动到滚动视图上.

您可能会发现什么,特别是如果您的某些控件非常大(例如,我希望图像视图比标签或文本字段大得多),平移手势识别器会受到一些限制,因为在尝试拖动视图时如果它们靠近在一起或重叠,你会无意中选错了.在这种情况下,您可能需要自己处理所有触摸事件的额外精度 – 因此,当触摸开始时,您将对所有控件(或组)进行测试,以查看哪个控件(或组)与您的分接位置最接近的中心,然后当您获取触摸移动事件,您可以更新此中心位置.

我没有制作任何像你所描述的那么复杂的东西,但我做了一个应用程序,用户可以将小图像拖到一个大图像上作为“装饰”.他们可以拖动任何数量的这些装饰品,并用捏手势来缩放它们.在这种情况下,我有一个UIImageVIEw作为背景,保持主图像.然后装饰物位于图像的边缘,并且使用平移手势识别器来检测它们被拖动到图像上.在拖动时,我实际上创建了一个新的装饰实例(UIImageVIEw),以便工具箱中总有另一个实例.捏手势识别器用于用户缩放装饰.为了让用户在他们已经放置的装饰物周围移动,我不得不使用手动触摸处理来检测正确的装饰(因为它们很容易重叠,而且对于用户而言看起来是圆形的UIVIEws,所以当用户想要拖动不同的角落时,用户很容易意外地拖动角落.)混合匹配的手势识别器和手动触摸处理似乎很好,这很好,因为它更容易使用手势识别器来处理更复杂的行为,如捏.

回到你的应用程序,一旦你的高级用户设置了所有内容,然后当普通用户加载应用程序时,你可以关闭任何触摸处理代码(并删除或不创建手势识别器),他们将获得静态表单正如高级用户所阐述的那样.然后确保在所有控件(例如UITextFIEld)上启用了用户交互,他们将能够在其中输入数据.

使用滚动视图上的控件执行上述所有 *** 作将会非常复杂,我认为,您最终可能需要处理大量的琐碎行为,以便让普通用户和高级用户都能正常工作.如果您同时处理UItableVIEws和UItableCells,我认为这将是100倍.

如果您希望我详细说明上面概述的应用程序的任何方面,请告诉我,因为它似乎与您的应用程序具有相同的功能.希望将来能够看到/听到有关您的应用的更多信息!

编辑

还有一件事发生在我身上 – 如果你热衷于在你的解决方案中使用UItableVIEw,那么我建议你的超级用户一次布局一个UItableVIEwCell.事实上,他们将UILabels和其他控件拖到一个基本的UIVIEw上,当他们完成你的时候,然后用来记录控件的位置.然后在单元格中显示这些控件时使用这些位置 – 在cellForRowAtIndexPath中,您将创建并初始化所有选定的控件,并将所有控件放置在新创建的单元格中的高级用户选择的位置和布局中.高级用户还可以通过控制来改变他们正在布置的单元的高度,以获得更大的灵活性.他们将一个接一个地创建一系列单元格布局(我猜这些单元格中的每一个都是控件的“组”),然后这些单元格将在表格视图中按顺序显示.然后,您可以让高级用户进行一些最终调整控制,让他们将表格置于编辑模式,以便他们可以重新排序单元格(甚至删除一些单元格).

根据应用程序的不同,也许用户也可以将之前创建的这些单元格布局始终可用,因此在他们构建了一些常用控件组之后,他们可以继续重复使用它们来快速构建表单.然后偶尔他们会创建一个新的单元格布局,因为到目前为止他们创建的那些都不合适,并且它将再次保存为模板,以便他们在将来的表单中再次使用.

总结

以上是内存溢出为你收集整理的iOS嵌套视图层次结构,支持拖放功能,允许最终用户配置表单全部内容,希望文章能够帮你解决iOS嵌套视图层次结构,支持拖放功能,允许最终用户配置表单所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/1051927.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-25
下一篇 2022-05-25

发表评论

登录后才能评论

评论列表(0条)

保存