【问题标题】:Partial Swipe to Pop Breaks Interface Builder UI部分滑动到 Pop Breaks Interface Builder UI
【发布时间】:2023-04-11 05:20:02
【问题描述】:

当我在我的应用程序的表格视图中点击一个单元格时,我会呈现另一个视图控制器。这个视图控制器是使用 initWithNibName:bundle: 方法从一个 nib 初始化的,并且我有许多带有 IBOutlets 的 UIButtons,我通过界面生成器配置了这些按钮。

90% 的时间,一切都很好。我可以按预期呈现和关闭视图控制器。可以通过导航栏上的按钮或滑动手势关闭。

问题:

如果我开始滑动以关闭手势,但随后将手指返回到屏幕左侧并让视图控制器保持原位,那么我对插座的所有引用都将被破坏。按钮的操作仍会向我的代码发送有效调用,并且正在调用其连接的方法,但任何更新相同 UI 元素的尝试都会失败。

编辑:我怀疑视图被部分释放或其他什么。 (当滑动弹出手势开始时调用 Dealloc。

【问题讨论】:

  • 您需要显示用于滑动的代码,并描述您的控制器层次结构。你有导航控制器还是只有一个独立的导航栏?

标签: ios interface-builder gesture iboutlet


【解决方案1】:

我建议您使用 Apple 的模板,即 Master-Detail 应用程序,并以此为基础构建您的项目,这是最简单、最容易的方法。如果你这样做,你的项目会很好地工作,不会搞砸。

【讨论】:

  • 这是一个预先存在的应用程序。我无法重新开始。不过谢谢你的建议
  • 也许尝试将您的其他 ViewController 导入其中
  • 我看不出这对将这些网点设置为零有何帮助?
  • 当应用在模拟器中崩溃时,你看过调试器吗?
  • 它没有崩溃......它只是没有响应更新 UI 的调用
【解决方案2】:

结果证明与 Interface Builder 无关。我的 UI 应该更新以响应这样的委托回调方法:

- (IBAction)didPressButton {
    manager.signInUser(self.user);
}

//Delegate Method
- (void)managerDidSignInWithSuccess {
    // Update UI
}

我在 init 方法中分配委托,当我将 VC 部分滑开时,该方法被调用并重新分配。将分配移动到 viewDidLoad 就可以了,现在一切都按预期工作了。

-(id)init {
    if (self = [super init]) {
        manager.delegate = self;
        //other init stuff
    }
}

应该是:

-(void)viewDidLoad {
    manager.delegate = self;
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2023-04-07
    • 1970-01-01
    • 2011-03-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-03-16
    • 2011-06-21
    相关资源
    最近更新 更多