问题标签 [uiviewcontroller]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
5 回答
6131 浏览

cocoa-touch - 横向显示 MFMailComposeViewController

我的应用程序是基于横向的。我想在横向使用 MFMailComposeViewController 但找不到任何关于方向的通知。在横向中,MFMailComposeViewController 仅显示邮件撰写窗口的顶部,在横向时从左侧进入。基本上它覆盖了横向屏幕的一半。有没有办法让邮件撰写窗口以横向而不是纵向出现?

--- 编辑 --- 我想加载邮件撰写的视图是这样派生的:

从上面可以看出,邮件撰写父视图是第三个加载的。在 info.plist 中,我这样做:

0 投票
2 回答
140 浏览

objective-c - 逻辑错误还是我的程序跳过了部分?

仅供参考,我正在使用 Objective-C 编程,但任何人都可以提供帮助。在过去的两个小时里,我一直坐在这里试图找出问题所在,并且我已经尽我所能来调试这个简单的小编码问题。查看下面的代码,我会解释。在应用程序中,它从 MainScreenViewController 开始。我的应用程序为用户提供了两种选择……选择“主”按钮或“工作”按钮(基本客户端-服务器模型)。根据用户的选择,应用程序应该加载另一个视图(MasterViewController 或 WorkerViewController)。现在,当我运行应用程序时,如果您遵循打印命令并假设选择“主”按钮,那么在我的程序中,它会打印出“masterButtonPressed - Stage 1”和“ 出错了吗?就像我说的,当按下“主”按钮时,视图永远不会改变。谢谢你的帮助!

MainScreenViewController.h

MainScreenViewController.m

ErwinAppDelegate.h

ErwinAppDelegate.m

0 投票
3 回答
23473 浏览

iphone - 在哪里确定 UIView 大小

摘要:在初始化那个视图时应该如何UIViewController知道它的 UIView 实例的大小?

UIView 的专用初始化方法是initWithFrame:(CGRect)frame方法。这将为新创建的 UIView 设置框架。UIViewController's如果请求视图控制器的视图,则可以从 loadView 方法调用此方法。UIViewController关于子类化和视图大小的状态文档:

在为视图层次结构创建视图时,您应该始终设置视图的自动调整大小属性。当视图控制器显示在屏幕上时,它的根视图通常会调整大小以适应可用空间,这可能会根据窗口的当前方向和其他界面元素(例如状态栏)的存在而有所不同。

因此,UIViewController实例应该设置这些属性。到目前为止这么好,UIViewController到目前为止不必知道它的观点有多大或将有多大。

UIViewController请求 a 的视图且视图属性为 nil 时,调用视图控制器的 loadView 方法。现在有一个问题,因为UIView需要初始化,但是视图控制器仍然不知道视图应该是什么大小。你应该初始化多大的视图?您在代码中的哪个位置确定视图大小?

您可以使用零矩形 ( CGRectZero) 初始化视图:

让调用者像这样设置视图框架:

这会从视图控制器 (viewController.view) 请求视图,从而使用 loadView 方法加载其视图。此 loadView 方法使用CGRectZero. 然后调用者设置它的框架(view.frame = ...)

问题是视图上的 frame 属性设置了两次,如果您的自定义UIView在 setFrame 方法中进行一些高级布局(例如放置和调整子视图大小),可能会导致更多的工作。您可以通过创建一个专用的初始化方法来防止这种情况,该方法UIViewController已经向调用者询问了一个 CGRect,您将其存储在一个 ivar 中。在调用 loadView 方法时,您使用此 ivar 创建视图。

去这里的好方法是什么?设置视图的框架两次(用 初始化CGRectZero,然后设置),或者给UIViewController一个新的初始化方法和一个 CGRect (从而给它一个框架属性)?或者我错过了什么,还有其他可能性吗?

0 投票
1 回答
195 浏览

uiview - 如何在 UIView 中删除子视图

在我的应用程序中有两个视图,它们的名称是 Loginview 和 sampleview

我添加到的这个登录视图[self.view addsubview:Loginview];

登录操作后。我将 self.view 更改为[self.view addsubview:sampleview];

但是那个时候loginview也在显示..

避免这种情况。如何删除子视图self.view

0 投票
3 回答
946 浏览

iphone - 我可以在释放 ViewController 的同时保留 View 吗?

我正在尝试将新视图加载到现有视图控制器中,但我想从 xib 文件中加载该视图。我的计划是创建第二个 viewController(下面代码中的 viewController1),然后保留它的视图并释放我刚刚创建的那个 viewController。我希望 viewController 会被释放并且视图会一直存在,但这似乎没有发生。

问题 1:如果视图控制器被解除分配,无论视图的保留计数是多少,它的关联视图是否也会被解除分配?在下面的示例代码中,您可以看到视图在突然消失之前的保留计数为 13。

问题2:为什么保留视图会使它的retainCount 增加3?

0 投票
1 回答
1589 浏览

iphone - 在主视图上方翻转子视图

我正在尝试构建一个位于主视图上方的子视图,该子视图大约是主视图大小的 3/4。当按下按钮时,子视图应翻转到另一个子视图。我很接近,但有两个问题。

第一个问题是第一次按下翻转按钮时,第二个子视图以全屏开始并缩小到指定的帧大小,而不是渲染任何翻转动画。

一旦第二个视图被渲染,我就可以在第一个和第二个视图之间翻转(我添加了第二个按钮来翻转以进行测试)。

我的第二个问题是,当视图翻转时,新视图在翻转之前加载,然后发生翻转。在此之前我已经构建了翻转视图,但只有当整个屏幕都是视图时才能正常工作。

这是我的主视图控制器中的代码:

这是两个按钮的代码:

非常感谢对我的任何一个问题的任何帮助!

0 投票
2 回答
5001 浏览

cocoa-touch - 从另一个视图返回后从表视图重新加载数据

我的申请有问题。任何帮助将不胜感激。基本上是从视图 A 到视图 B,然后从视图 B 回来。

在视图 A 中,它具有从数据库中加载的动态数据,并显示在表视图上。在这个页面中,它也有编辑按钮,而不是在导航栏上。当用户点击编辑按钮时,它会转到视图 B,其中显示了选择视图。用户可以在此处进行任何更改。完成后,用户点击导航栏上的后退按钮,将更改保存到 NSUserDefaults 中,然后通过弹出视图 B 返回视图 A。

返回视图 A 时,它应该从 UIUserDefaults 中获取新数据,并且确实如此。我使用 NSLog 打印到控制台,它显示了正确的数据。它还应该调用 viewWillAppear: 方法来获取表格视图的新数据,但它没有。它甚至没有调用 tableView:numberOfRowsInSection: 方法。我在这个方法中放置了一个 NSLog 语句,但没有在控制台中打印出来。

结果,视图 A 仍然有旧数据。在视图 A 中获取新数据的唯一方法是停止并启动应用程序。

视图 A 和视图 B 都是UIViewControllerUITableViewDelegate和的子类UITableViewDataSource

这是我在视图 A 中的代码:

在这里,“theTableView”是一个 UITableView 变量。我尝试了“reloadData”、“setNeedsDisplay”和“setNeedsLayout”这三种情况,但似乎都不起作用。

在视图B中,这里是导航栏上的返回按钮对应的方法。

我做对了吗?或者有什么我错过的吗?

0 投票
5 回答
16370 浏览

iphone - 如何在 iPhone 上的 UIViewController 之间共享对象?

我的应用程序是一个标签栏应用程序,每个标签都有一个单独的视图控制器。

我的第一个视图控制器 (A) 中有一个对象,其中包含我存储的所有应用程序数据(请忽略 NSUserDefaults),当我按下一个按钮时,第二个视图控制器 (B) 需要访问它。我怎样才能以最好的方式实现这一目标?

0 投票
1 回答
229 浏览

iphone - 类变量类型被改变

所以在我的视图控制器中,我运行代码来填充客户(自定义类)对象的 NSArray。这个自定义类的对象属于另一个名为 Address 的自定义类(客户有一个帐单地址和一个送货地址)。在视图控制器中,当列表中的客户被选中时,它会向新的视图控制器传递一个客户对象,如下所示:

我第一次在运行应用程序时访问这个视图控制器,它工作正常。但是,当我重新访问视图控制器时,会发生一些有趣的事情。应用程序崩溃,无法识别的选择器发送到实例 0x00whatever。使用 xCode 中的鼠标悬停调试功能,我发现客户的 shipAddress 变量的第一个对象的类型从 NSString 更改为 NSIndexPath。这不会发生在客户的 billAddress 对象上。有人知道这里发生了什么吗?似乎我可能遇到了内存管理问题,但在我撕开我的代码跟踪所有保留和释放之前,我肯定希望对此进行确认......

编辑:更多信息在这里。使用以下代码,我在类级别有一个 NSMutableArray。在循环的每次迭代中,我都会遍历 XML 中的节点(效果很好)。每次检测到一个新字母作为名称的第一个字母时,我都会创建一个新的子数组并将客户添加到其中,从而为我的类级别 NSMutableArray (customers) 填充每个检测到的字母表中的客户子数组。我的问题是关于循环客户对象的保留和释放。Clang Static 说客户有一个过度保留的错误,但是当我根据 Clang 修复它时,循环崩溃了。是什么赋予了?相关代码如下:

注意:这段代码在大多数情况下都有效,但 clang 不喜欢它。

编辑: Customer 类中的地址是这样分配的(在 Clang 修复后现在不起作用)

0 投票
1 回答
623 浏览

cocoa-touch - 将 Cocoa 动画拟合到 MVC/OOP 模式中

MVC/OOP 设计模式说您不设置属性,本质上,您要求对象设置属性。同样,在 Cocoa 中,您不会告诉对象何时绘制自己。您的对象的代码详细说明了它是如何绘制自己的,因此我们相信框架可以决定(在大多数情况下)它应该何时绘制

但是,当谈到 Cocoa 中的动画(特别是 Cocoa-Touch)时,似乎我们现在必须控制对象何时从对象视图控制器中绘制自身。我不能向 UIView 子类发送消息,要求它更改一些值,然后让它知道它会慢慢地(持续时间 = X)根据属性更改将自己动画到一个新的位置、alpha、旋转等。或者我可以吗?

基本上,我正在寻找一种设置属性然后走开的方法。相反,我似乎需要包装调用对象的代码,要求它使用某种动画块“[UIView beginAnimations:nil context:NULL]; ... [UIView commitAnimations];”来更改其属性

我的视图控制器中有很多动画块,而视图对象中没有... . 我没有比 Cocoa-Touch 中的 UIView 动画走得更远,所以也许这是我的问题,是时候深入挖掘了?!?