当我隐藏UINavigationbar时,UITableView无法工作。帮助〜

时间:2012-10-22 06:52:07

标签: ios uitableview uinavigationcontroller uinavigationbar

只是一个简单的应用

我创建了两个UIViewController,名为A和B. appDelegate中的代码

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
    self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];

    A * a = [[A alloc] initWithNibName:@"A" bundle:nil];
    UINavigationController * nav = [[UINavigationController alloc] initWithRootViewController:a];

    [self.window setRootViewController:nav];
    [self.window makeKeyAndVisible];
    return YES;
}

ViewController A中的代码

- (void)goB {
    B * b = [[B alloc] initWithNibName:@"B" bundle:nil];
    [[self navigationController] pushViewController:b animated:YES];
}

- (void)viewDidLoad {
    [super viewDidLoad];

//    [[[self navigationController] navigationBar] setHidden:YES]; // i guess this line make a problem
    [[self navigationController] setNavigationBarHidden:YES];

    UISwipeGestureRecognizer * s = [[UISwipeGestureRecognizer alloc] initWithTarget:self action:@selector(goB)];
    [s setDirection:UISwipeGestureRecognizerDirectionLeft];
    [[self view] addGestureRecognizer:s];
}

ViewController B中没有代码,但我将UITableView放入B.xib 然后,如果我写

[[[self navigationController] navigationBar] setHidden:YES].  

B中的tableView无法正常工作,我无法滚动它 但如果我删除这一行,它就可以了 还有另一个问题。当我添加UITableView数据源和委托时 @interface D : NSObject <UITableViewDataSource, UITableViewDelegate>

@implementation D

- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView {
    return 1;
}

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
    return 4;
}

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
    UITableViewCell * cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:@"Cell"];

    [[cell textLabel] setText:@"123"];
    return cell;
}

我又犯了一个错误。

libobjc.A.dylib`objc_msgSend:
0x37dd3fac:  teq.w  r0, #0
0x37dd3fb0:  beq    0x37dd3fee                ; objc_msgSend + 66
0x37dd3fb2:  push.w {r3, r4}
0x37dd3fb6:  ldr    r4, [r0]
0x37dd3fb8:  lsr.w  r9, r1, #2
0x37dd3fbc:  ldr    r3, [r4, #8]
0x37dd3fbe:  add.w  r3, r3, #8
0x37dd3fc2:  ldr    r12, [r3, #-8]
0x37dd3fc6:  and.w  r9, r9, r12
0x37dd3fca:  ldr.w  r4, [r3, r9, lsl #2]
0x37dd3fce:  teq.w  r4, #0
0x37dd3fd2:  add.w  r9, r9, #1
0x37dd3fd6:  beq    0x37dd3fea                ; objc_msgSend + 62
0x37dd3fd8:  ldr.w  r12, [r4]
0x37dd3fdc:  teq.w  r1, r12
0x37dd3fe0:  bne    0x37dd3fc2                ; objc_msgSend + 22
0x37dd3fe2:  ldr.w  r12, [r4, #8]
0x37dd3fe6:  pop    {r3, r4}
0x37dd3fe8:  bx     r12
0x37dd3fea:  pop    {r3, r4}
0x37dd3fec:  b      0x37dd3ff4                ; objc_msgSend_uncached
0x37dd3fee:  mov.w  r1, #0
0x37dd3ff2:  bx     lr

2 个答案:

答案 0 :(得分:0)

使用此

 [self.navigationController setNavigationBarHidden:YES];

而不是

 [[[self navigationController] navigationBar] setHidden:YES].  

答案 1 :(得分:0)

您也可以尝试使用

[[[self navigationController] topViewController] setNavigationBarHidden:YES]