表视图不会响应

时间:2011-04-14 23:19:08

标签: ios4 uikit

我有一个从UITableViewController派生的BarTableViewController。 这是我的主视图,因此在应用程序启动时自动加载,并且该类的实例工作正常。

现在我想让原始实例推送同一个类的另一个实例,如下所示:

BarTableViewController *bar = [[[BarViewController alloc] initForFoo:theFoo] autorelease];
[self.navigationController pushViewController:bar animated:YES];

initForFoo方法如下所示:

- (id)initForFoo:(Foo *)theFoo
{
    if ((self = [self initWithNibName:@"BarTableViewController" bundle:nil])) {
        self.foo = theFoo;
    }
    return self;
}

推送工作和视图加载,并在模拟器中正常工作。

然而,在我的iPhone 4上,表格视图在第二个实例中没有响应:在屏幕上上下滑动我的手指什么也没做。如果我点击搜索栏然后点击取消,表格就会响应。

如果我只是调用init而不是initWithNibName,那么表视图甚至第一次就会正确响应,但当然我的IBOutlet东西都没有被绑定。

这似乎是一次性的事情:一旦我完成了搜索和取消,表格将响应,即使我点击后退按钮,然后再次返回到同一个视图控制器实例,它不会卡住。

我在这里做错了什么?

更新: 我在MainWindow.xib中确实有这个人作为RootViewController。我尝试过这个 out并让app delegate创建他,但仍然是相同的行为:一切 工作除了表视图不滚动。但现在最初的实例也被冻结了。

因此,每当我显式调用initWithNibName时,我都会遇到这种冻结行为。

UPDATE2: 我一直在评论viewDidLoad的不同块,如果我省略它,它似乎一直在工作:

[self.navigationController setToolbarHidden:NO animated:NO];

当然这意味着我没有工具栏。我已经尝试将其重新放入,没有任何工具栏项,但它仍然存在问题。

UPDATE3: 当GDB处于这种状态时突破它,这就是我在UITableView中找到的:

(gdb) p * [[[UIApplication sharedApplication] delegate] searchViewController]
  <UITableViewController> = {
    <UIViewController> = {
      <UIResponder> = {
        <NSObject> = {
          isa = 0x9fe44
        }, <No data fields>}, 
      members of UIViewController: 
      _view = 0xa27600, 
      _tabBarItem = 0x0, 
      _navigationItem = 0x4d6dcc0, 
      _toolbarItems = 0x0, 
      _title = 0x0, 
      _nibName = 0xb9120, 
      _nibBundle = 0x242b40, 
      _parentViewController = 0x4d6de90, 
      _childViewControllers = 0x0, 
      _childModalViewController = 0x0, 
      _parentModalViewController = 0x0, 
      _modalTransitionView = 0x0, 
      _modalPreservedFirstResponder = 0x0, 
      _defaultFirstResponder = 0x0, 
      _dimmingView = 0x0, 
      _dropShadowView = 0x0, 
      _presentationSuperview = 0x0, 
      _sheetView = 0x0, 
      _currentAction = 0x0, 
      _savedHeaderSuperview = 0x0, 
      _savedFooterSuperview = 0x0, 
      _editButtonItem = 0x0, 
      _searchDisplayController = 0x4d7b290, 
      _popoverController = 0x0, 
      _modalTransitionStyle = UIModalTransitionStyleCoverVertical, 
      _modalPresentationStyle = UIModalPresentationFullScreen, 
      _lastKnownInterfaceOrientation = UIInterfaceOrientationPortrait, 
      _contentSizeForViewInPopover = {
        width = 320, 
        height = 1100
      }, 
      _formSheetSize = {
        width = 0, 
        height = 0
      }, 
      _viewControllerFlags = {
        appearState = 2, 
        isEditing = 0, 
        isPerformingModalTransition = 0, 
        hidesBottomBarWhenPushed = 0, 
        autoresizesArchivedViewToFullSize = 0, 
        viewLoadedFromControllerNib = 0, 
        isRootViewController = 0, 
        isSheet = 0, 
        isSuspended = 0, 
        wasApplicationFrameAtSuspend = 0, 
        wantsFullScreenLayout = 0, 
        shouldUseFullScreenLayout = 0, 
        allowsAutorotation = 1, 
        searchControllerRetained = 1, 
        oldModalInPopover = 0, 
        isModalInPopover = 0, 
        restoreDeepestFirstResponder = 0, 
        isInWillRotateCallback = 0, 
        disallowMixedOrientationPresentations = 0, 
        modalPresentationsAreCurrentContext = 0
      }
    }, 
    members of UITableViewController: 
    _tableViewStyle = UITableViewStylePlain, 
    _keyboardSupport = 0x4d87540, 
    _tableViewControllerFlags = {
      clearsSelectionOnViewWillAppear = -1
    }
  }, 

我在gdb中尝试了一些盲目的isFirstResponder刺,没有运气。

1 个答案:

答案 0 :(得分:0)

我看了:

  

如果在同一个NIB中创建视图控制器及其视图,并将视图嵌套在视图控制器下面,它将自动调整视图的框架。

<{3>}中的

这激发了我尝试编辑我的XIB并添加一个ViewController并将TableView置于其下 - 之前我必须在XIB和TableView中使用ViewController处于顶层。

这解决了我的“冻结表视图”问题,但我仍然不明白为什么:我做了一堆前后检查各种组件的帧大小,并且无法分辨出改变了什么。但它至少是固定的。