Ios4 表视图将不响应
我有一个从UITableViewController派生的BarTableViewController。 它是我的主视图,因此在应用程序启动时自动加载,并且该类的实例工作正常 现在我尝试让原始实例推送同一类的另一个实例,如下所示:Ios4 表视图将不响应,ios4,uikit,Ios4,Uikit,我有一个从UITableViewController派生的BarTableViewController。 它是我的主视图,因此在应用程序启动时自动加载,并且该类的实例工作正常 现在我尝试让原始实例推送同一类的另一个实例,如下所示: BarTableViewController *bar = [[[BarViewController alloc] initForFoo:theFoo] autorelease]; [self.navigationController pushViewControll
BarTableViewController *bar = [[[BarViewController alloc] initForFoo:theFoo] autorelease];
[self.navigationController pushViewController:bar animated:YES];
- (id)initForFoo:(Foo *)theFoo
{
if ((self = [self initWithNibName:@"BarTableViewController" bundle:nil])) {
self.foo = theFoo;
}
return self;
}
initForFoo方法如下所示:
BarTableViewController *bar = [[[BarViewController alloc] initForFoo:theFoo] autorelease];
[self.navigationController pushViewController:bar animated:YES];
- (id)initForFoo:(Foo *)theFoo
{
if ((self = [self initWithNibName:@"BarTableViewController" bundle:nil])) {
self.foo = theFoo;
}
return self;
}
推送工作,视图加载,在模拟器中工作良好
然而,在我的iPhone4上,表视图在第二种情况下没有响应:在屏幕上上上下滑动手指没有任何作用。如果我点击搜索栏中的,然后点击取消,则表格会有响应
如果我只是调用init,而不是initWithNibName,那么即使是第一次,表视图也会正确响应,但是当然,我的IBOutlet内容都不会绑定
这似乎是一次性的:一旦我完成了搜索并取消,表就会响应,即使我点击后退按钮,然后再次返回到视图控制器的同一个实例,它也不会被卡住
我做错了什么
更新:
我的MainWindow.xib中确实有这个家伙作为RootViewController。我试过了
让应用程序代理创建他,但还是一样的行为:一切
除表格视图不滚动外,其他功能均有效。但是现在初始实例也被冻结了
所以,每当我显式调用initWithNibName时,我都会得到这种冻结行为
更新2:
我已经对viewDidLoad的不同部分进行了注释,如果我忽略这一点,它似乎一直有效:
[self.navigationController setToolbarHidden:NO animated:NO];
当然,这意味着我没有工具栏。我试着在没有工具栏项的情况下把它放回去,但它仍然存在问题
更新3:
当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刺杀,但没有成功。我读到:
如果在同一个NIB中创建视图控制器及其视图,并将视图嵌套在视图控制器下,它将自动调整视图的帧
在中,这启发我尝试编辑我的XIB,添加一个ViewController,并将TableView放在以前我必须在XIB中使用的ViewController下,TableView处于顶级
这解决了我的冻结表视图的问题,但我仍然不明白为什么:我在检查各个组件的框架大小之前和之后做了一系列的检查,但不知道发生了什么变化。但至少它是固定的。我有预感,这可能是第一反应者的问题。一些次要元素并没有放弃作为第一响应者的角色,所以您的滚动视图没有响应……我该如何跟踪它?我并没有明确地设置第一响应者:它只是一个带有导航条的UITableViewController。我肯定我在做一些愚蠢的事情。它肯定与时间有关,因为它在模拟器中工作,而第一响应者和时间往往是相关的。