В моем приложении у меня есть контроллер представления с кнопкой поверх него. Когда кнопка нажата, представление таблицы будет анимироваться слева направо. Ниже изображение отображает содержимое экрана, когда кнопка не нажата.
На правом изображении отображается таблица при нажатии кнопки.

image before the button pressed enter image description here

Этот код запускается при нажатии кнопки.

-(void) profileButtonClicked
{
profileTable=[[UITableView alloc]initWithFrame:CGRectMake(-220, 0, 220, height) style:UITableViewStylePlain];
profileTable.delegate=self;
profileTable.dataSource=self;
profileTable.backgroundColor=[HexColorCode colorWithHexastring:@"252020"];
profileTable.userInteractionEnabled=YES;
[self.view addSubView: profileTable];
if (profileButton.tag==1)
{

    CGPoint newLeftCenter = CGPointMake( 220.0f + self.view.frame.size.width / 2.0f, self.view.center.y);
    [UIView beginAnimations:nil context:nil];
    [UIView setAnimationDuration:1];
    self.view.center = newLeftCenter;
    [UIView commitAnimations];

    CGPoint newLeftCenterForTable = CGPointMake( 1- profileTable.frame.size.width / 2.0f, profileTable.center.y);
    [UIView beginAnimations:nil context:nil];
    [UIView setAnimationDuration:1];
    profileTable.center = newLeftCenterForTable;
    [UIView commitAnimations];
    profileTable.userInteractionEnabled=YES;
     [self.view addSubview:profileTable];
    profileButton.tag=2;

}
else
{
    profileButton.tag=1;

    CGPoint newLeftCenter = CGPointMake(  self.view.frame.size.width / 2.0f, self.view.center.y);
    [UIView beginAnimations:nil context:nil];
    [UIView setAnimationDuration:1.0f];
    self.view.center = newLeftCenter;
    [UIView commitAnimations];

    CGPoint newLeftCenterForTable = CGPointMake(  profileTable.frame.size.width / 2.0f-220, profileTable.center.y);
    [UIView beginAnimations:nil context:nil];
    [UIView setAnimationDuration:1.0f];
    profileTable.center = newLeftCenterForTable;
    [UIView commitAnimations];

}
}

Моя проблема в том, что когда я нажимаю строку на столе, она не распознается. Это. это не входит в

didSelectrowAtIndexPath:

0
Chandru 17 Апр 2014 в 15:30

2 ответа

Лучший ответ

Проблема в том, что ваше представление таблицы находится за пределами рамки представления вашего контроллера. Вы должны помнить, что self.view не должен двигаться. (я никогда не видел случая, чтобы это было полезно).

Я бы порекомендовал иметь родительский контроллер представления. Вы добавите tableview своему родителю, и он будет делегатом. Затем вы добавите дочерний контроллер представления, который является вашим текущим контроллером (тот, который отображает Taxi Match).

В родительском контроллере представления:

 -(void)viewDidLoad{
    yourController = [[UIViewController alloc] init]; 
    [self addChilViewController:yourController];
    [self.view addSubview:yourController.view];

    profileTable=[[UITableView alloc]initWithFrame:CGRectMake(-220, 0, 220, height) style:UITableViewStylePlain];
    profileTable.delegate=self;
    profileTable.dataSource=self;
    profileTable.backgroundColor=[HexColorCode colorWithHexastring:@"252020"];
    profileTable.userInteractionEnabled=YES;
    [self.view addSubView: profileTable];
    ....
}

Затем, когда вы касаетесь своей кнопки в контроллере дочернего представления, вы должны вызвать родительский элемент и выполнить:

-(void)moveController{
    CGPoint newLeftCenter = CGPointMake( 220.0f + self.view.frame.size.width / 2.0f, self.view.center.y);
    [UIView beginAnimations:nil context:nil];
    [UIView setAnimationDuration:1];
    yourController.view.center = newLeftCenter;
    [UIView commitAnimations];

    CGPoint newLeftCenterForTable = CGPointMake( 1- profileTable.frame.size.width / 2.0f, profileTable.center.y);
    [UIView beginAnimations:nil context:nil];
    [UIView setAnimationDuration:1];
    profileTable.center = newLeftCenterForTable;
    [UIView commitAnimations];
    profileTable.userInteractionEnabled=YES;
     [self.view addSubview:profileTable];
    profileButton.tag=2;
}
1
streem 17 Апр 2014 в 12:01

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

-1
Ashutosh 17 Апр 2014 в 11:33