Строка TableView не может выбрать - PullRequest
1 голос
/ 04 марта 2011

Я определил свой собственный контроллер без файла пера следующим образом:

@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];
    // ...
}

Я создаю таблицу, в которой перечислены поисковые системы в выпадающем меню селектора:

- (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;
}

// Добавлен

Странно, когда меню всплыло впервые, выбранная по умолчанию ячейка была выделена правильно, но очень быстроПодсветка исчезнет.

Ответы [ 4 ]

1 голос
/ 05 декабря 2016

Проверьте, реализовали ли вы это

UITapGestureRecognizer *tap = [[UITapGestureRecognizer alloc]
                                   initWithTarget:self
                                   action:@selector(dismissKeyboard)];

[self.view addGestureRecognizer:tap];

didSelectRowAtIndexPath не будет вызван, если он присутствует. Один из способов обойти это - установить [self.view addGestureRecognizer:tap]; только для целевого вида, например [self.svContent addGestureRecognizer:tap];.

.

В качестве альтернативы проверьте, какой вид затрагивается.

- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldReceiveTouch:(UITouch *)touch
{
    if ((touch.view == YourTable)) 
    {
        return NO;
    }
    return YES;
}
0 голосов
/ 04 марта 2011

Попробуйте указать cell.selectionStyle = UITableViewCellSelectionStyleBlue в своей таблице. Просмотр источника данных.Также проверьте, включен ли userInteraction для табличного представления и ячеек.

0 голосов
/ 04 марта 2011

Показываете ли вы какие-либо данные в таблице, реализовали ли вы

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

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {

в вашем viewController ??

Кажется, что вы правильно устанавливаете свойство delgate, также вы добавили протоколы втот же ViewController.Таким образом, проблема может быть либо в том, что в tableView нет данных для выбора, либо в верхней части tableView есть какой-то View, который блокирует ваше взаимодействие с tableView.

0 голосов
/ 04 марта 2011

Используйте

cell.selectionStyle = UITableViewCellSelectionStyleGray;

в своей

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

для своей ячейки.

удалите

cell.userInteractionEnabled = YES;

код из вашего файла.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...