TableView行无法选择

时间:2011-03-04 04:58:10

标签: iphone objective-c uitableview

我定义了我自己的控制器,没有像这样的nib文件:

@interface EngineViewController : UIViewController <UITableViewDelegate, UITableViewDataSource> {
    EngineViewProperties* viewProp;
    UIImageView *imgView; // image view of selected engine
    NSUInteger selectedIndex;
    UITableView *menu;
}

@property (nonatomic,retain) EngineViewProperties* viewProp;

- (EngineViewController *) initWithEngineViewProperties: (EngineViewProperties *) _viewProp;

- (void) dropdownMenu: (id) sender;

我在loadView中创建了我的视图,有三个子视图。帮助子视图arrowBtn弹出搜索引擎列表。

- (void)loadView {
    // ...
    UIButton *arrowBtn = [[UIButton alloc] initWithFrame:rect];
    [arrowBtn setImage:viewProp.arrowImg forState:UIControlStateNormal];

    [arrowBtn addTarget:self action:@selector(dropdownMenu:) forControlEvents:UIControlEventTouchUpInside];

    [self.view addSubview:imgView];
    [self.view addSubview:label];
    [self.view addSubview:arrowBtn];
    // ...
}

我在选择器dropdownMenu:

中创建了一个列出搜索引擎的表格
- (void) dropdownMenu: (id) sender {
    UIButton *arrowBtn = (UIButton *)sender;
    // ...
    menu = [[UITableView alloc] initWithFrame:rect style:UITableViewStylePlain];
    menu.delegate = self;
    menu.dataSource = self;
    menu.backgroundColor = [UIColor blackColor];
    menu.allowsSelection = YES;
    [self.view addSubview:menu];
    [self.view bringSubviewToFront:menu];
    [menu release];
}

我实施了

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
像往常一样。 但结果是菜单快乐地弹出,但我对细胞无能为力。我点击了单元格,但没有响应。无法调用像“didSelectRowAtIndexPath”这样的方法。 很抱歉一次粘贴这么多代码。但我真的需要帮助。我不知道是什么问题。请原谅我因为我的英语水平低而且Iphone的开发技巧很低。如果你给我一点帮助,我会非常感谢建议。

//添加-------------------------

“numberOfRowsInSection”很简单:

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
    return [viewProp.txtArray count];
}

和另一种方法:

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
    static NSString *MenuItems = @"MenuItems";
    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:MenuItems];
    if (cell == nil) {
            cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier: MenuItems] autorelease];
    }
    NSUInteger row = [indexPath row];

    cell.imageView.image = [viewProp.imgArray objectAtIndex:row];
    cell.textLabel.text = [viewProp.txtArray objectAtIndex:row];
    cell.textLabel.textColor = [UIColor whiteColor];
    cell.textLabel.font = [UIFont systemFontOfSize:12.0];
    cell.selectionStyle = UITableViewCellSelectionStyleNone; // Blue style tried,helpless too
    if (row == selectedIndex) {
            cell.selected = YES;
    }
    cell.userInteractionEnabled = YES;
    return cell;
}

//已添加

奇怪的是,当菜单首先加速时,默认选中的单元格被正确突出显示,但突出显示很快就会消失。

3 个答案:

答案 0 :(得分:0)

使用

cell.selectionStyle = UITableViewCellSelectionStyleGray;

中的

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath

为您的手机。

删除

cell.userInteractionEnabled = YES;

您文件中的代码。

答案 1 :(得分:0)

尝试在表中查看cell.selectionStyle = UITableViewCellSelectionStyleBlue查看数据源。同时检查是否为表视图和单元格启用了userInteraction

答案 2 :(得分:0)

您是否在表格中显示任何数据?

- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView {

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
在你的viewController中

??

似乎您正在正确设置delgate属性,您也将协议添加到同一个ViewController。所以问题可能是tableView中没有数据供选择,或者tableView上有一些View阻止你与tableView的交互。