【问题标题】:iOS SDK 5.0 iPhone Application TroubleiOS SDK 5.0 iPhone 应用程序故障
【发布时间】:2012-05-23 13:19:16
【问题描述】:

我正在开发我的第一个 iPhone 应用程序,并在我的代码中偶然发现了一个未知错误。该代码运行良好,但问题在于当我点击我制作的自定义 UIButton 并加载下一个视图时。我有一个所需的 buttonPressed IBAction 被调用来处理下一个视图控制器上加载的信息,但是函数调用的顺序是错误的。我有 5 个不同的 buttonPressed 功能,5 个中有 3 个工作正常。请注意,我通过 Storyboard 以完全相同的方式实现了它们,甚至尝试重新制作不工作的那些。我会发布代码,但代码是基本的 if/else 语句。我只是不确定为什么 5 种方法中有 3 种会起作用,而另外 2 种不会。任何帮助将不胜感激。

**这是工作 3 所需的顺序:

viewDidLoad -> 加载主屏幕(初始视图控制器 AKA ROOT,在主屏幕上,您有 5 个 UIButtons 来选择一个类别,点击一个按钮以加载到新的视图控制器)

categoryButtonPressed -> 设置计数器(新视图控制器的序列)

viewDidLoad -> 加载屏幕以缩小搜索范围

(现在您有 10 多个自定义按钮可以点击,每个按钮都将通过 buttonPressed IBAction 函数进行处理,一旦点击按钮并调用函数,就会加载一个新视图)

buttonPressed -> 设置计数器(新视图控制器的序列)

viewDidLoad -> 加载正确的信息

这是非工作2的顺序:

viewDidLoad -> 加载主屏幕(初始视图控制器 AKA ROOT) (在主屏幕上,你有 5 个 UIButtons 来选择一个类别,点击一个按钮加载到一个新的视图控制器)

categoryButtonPressed -> 设置计数器(新视图控制器的序列)

viewDidLoad -> 加载屏幕以缩小搜索范围 (现在你有 10 多个自定义按钮可以点击,每个按钮都将通过 buttonPressed IBAction 函数进行处理,一旦点击按钮并调用函数,就会加载一个新视图)

viewDidLoad -> 加载空白信息(空白屏幕)

buttonPressed -> 设置计数器,但由于视图已经加载为空白而迟到

想法?**

这是 categoryButtonPressed 的示例:

-(IBAction)categoryButtonPressed:(id)sender

{

if([sender tag] == 1)

    counter = 1;

else if([sender tag] == 2)

    counter = 2;

.

.

.

}

注意:我为要加载的特定项目标记了每个自定义按钮。此函数只是设置一个计数器,以便另一个函数可以加载特定文件。

【问题讨论】:

  • @LuisOscar 谢谢,你是对的,我应该添加评论,而不是答案......我的错。没有更多信息很难说......我理解你的按钮按下应该设置即将到来的视图控制器的一些参数然后转换到那个视图控制器是否正确?在不按下按钮的情况下加载辅助视图控制器似乎很奇怪,就像上面的样子。您在代码中的何处初始化该控制器?
  • 我已经更新了问题,也许现在你可以了解我想要做什么并弄清楚了。

标签: iphone ios xcode storyboard


【解决方案1】:

使用转场。

在您的主视图控制器上,通过在按下特定转场时在视图控制器上加载所需信息来设置转场。

如果您使用故事板,您可以按照本指南进行操作

http://www.scott-sherwood.com/?p=219

寻找“prepareForSegue”方法,在使用情节提要时,应以这种方式预先配置模态呈现的视图。

附带说明,“viewDidLoad”通常不用于加载另一个视图,它应该用于在加载后配置该视图。

【讨论】:

  • 我正在使用模态序列。我遇到的问题是 5 个中有 3 个可以正常工作。我已经以完全相同的方式设置了每一个,并且对它们为什么不能正常工作感到困惑。我需要做的就是以某种方式找到一种方法来更改 2 个非工作视图的函数调用顺序。
  • 您使用的是“prepareForSegue”方法吗?这就是我给你的链接的意思。当按下将引导您进入新视图的按钮时。您在那里配置该视图,以便它在出现时准备就绪。您的问题可能是您如何使用 viewdidLoad,尝试在 viewdidload 中设置一个 NSLOG 并查看它何时被调用,我敢打赌它会在以您想要的方式加载信息之前“加载”。这就是为什么我建议使用适当的 segue 方法。阅读该链接。
  • 那是我的问题,视图控制器是在调用 buttonPressed 函数之前加载的,因此加载了一个空屏幕。但是为什么这不起作用而其他 3 个 buttonPressed 操作呢?
  • 因为您不应该依赖于何时加载控制器来显示内容,如果您可以确保在按下该按钮之前视图不可见,请改用“viewWillAppear”方法。这应该让视图在基于按钮出现在屏幕上之前“重新配置”自身。
  • 你如何解释为什么函数调用的顺序不同?
猜你喜欢
  • 2011-12-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-12-13
  • 1970-01-01
相关资源
最近更新 更多