Кнопки в ScrollView не включены - PullRequest
1 голос
/ 26 мая 2011

Используя пример представления прокрутки Эрики Садун, я создал проект.Теперь у меня есть представление прокрутки и контроль страницы в моем проекте.Я создаю новый вид для каждой страницы и добавляю его в свой вид с прокруткой, как показано ниже.Каждое представление имеет 5 кнопок, поэтому я могу прокручивать 5 на 5. Однако кнопки, кажется, не включены.Есть идеи почему?

    // Create the scroll view and set its content size and delegate
    sv = [[[UIScrollView alloc] initWithFrame:CGRectMake(0.0f, 200.0f, 300.0f, 60.0f)] autorelease];
    sv.contentSize = CGSizeMake(NPAGES * 300.0f, sv.frame.size.height);
    sv.pagingEnabled = YES;
    sv.delegate = self;


    // Load in all the pages
    for (int i = 0; i < NPAGES; i++)
    {
        UIView *menuView = [[UIView alloc] initWithFrame:CGRectMake(0.0f, 0.0f, 300.0f, 60.0f)];


    for (int j = 0; j < 5 * (i+1); j++)
        {
            UIImage *menuImage = [UIImage imageNamed:@"menuimage.png"];
            UIImage *menuImage2 = [UIImage imageNamed:@"menuimageselected.png"];
UIButton *menuButton = [[UIButton buttonWithType:UIButtonTypeCustom] retain];

            menuButton.frame = CGRectMake(j * 60.0f, 0.0f, 60.0f, 60.0f);
            [menuButton addTarget:self action:@selector(menuButtonClicked) forControlEvents:UIControlEventTouchUpInside];


        menuButton.tag = j + 5 * i;

            menuButton.backgroundColor = [UIColor clearColor];
            [menuButton setImage:menuImage forState:UIControlStateNormal];
            [menuButton setImage:menuImage2 forState:UIControlStateSelected];
            [menuButton setImage:menuImage2 forState:UIControlStateHighlighted];
            [menuButton setEnabled:YES];


            [menuImage release];
            [menuButton release];
            [menuView addSubview:menuButton];

        }

        [sv addSubview:menuView];
        [sv bringSubviewToFront:menuView];

        [menuView release];

    }

    [self.view addSubview:sv];

Ответы [ 7 ]

1 голос
/ 26 мая 2011

Чтобы изменить изображение на ощупь, используйте

[menuButton setImage:menuImage2 forState:UIControlStateHighlighted];

Также убедитесь, что у вас есть menubutton.showTouchOnHighlight = YES; и

menuButton.adjustImageWhenHighlighted = YES;

Возможно, scrollView принимает сенсорные события. Попробуйте эти

scrollView.delaysContentTouches = NO;
scrollView.canCancelContentTouches = NO;
1 голос
/ 27 мая 2011

Я решил эту проблему, изменив рамку вида, который добавляю в вид с прокруткой. Поэтому вместо этой строки:

UIView *menuView = [[UIView alloc] initWithFrame:CGRectMake(0.0f, 0.0f, 300.0f, 60.0f)];

Теперь я заставляю вид менять свой фрейм каждый раз, когда меняю страницу:

UIView *menuView = [[UIView alloc] initWithFrame:CGRectMake(i * 300.0f, 0.0f, 300.0f, 60.0f)];

Таким образом, причина была связана с расположением рамки вида, которую я добавлял в вид с прокруткой. Эта проблема возникает, когда представление прокрутки используется вместе с подкачкой. Когда страница изменится, убедитесь, что представление внутри scrollview также перемещается в тот же кадр.

0 голосов
/ 26 мая 2011
  1. Я бы объявил "J" в скобках "for".

  2. Вы сохраняете кнопку UIB и затем отпускаете ее. Вам не нужно ничего делать, потому что вы не выделяете его.

  3. Вы не должны выпускать "menuImage".

  4. Вы назначаете "menuImage2" для выбранного состояния кнопки UIB. Это должен быть UIControlStateHighlighted.

Edit:

Не делайте этого:

 [menuImage release];
 [menuButton release];

Также попробуйте это:

- (void) menuButtonClicked: (id) sender {

    UIButton *btn = (UIButton *)sender;
    NSLog(@"clicked %d",[btn tag]);
}
0 голосов
/ 26 мая 2011

Просто попробуйте это, и я не уверен, сработает ли это в вашем случае.

 [scrollView bringSubviewToFront:button];
0 голосов
/ 26 мая 2011
 [menuImage release];

menuImage не должно быть релизом. Он получен из `[UIImage imageNamed:] и является автоматически выпущенным объектом. Это приведет к чрезмерному освобождению изображения.

0 голосов
/ 26 мая 2011

Пожалуйста, используйте этот код в scrollView

    UIButton *btn = [UIButton buttonWithType:UIButtonTypeCustom];
    btn.frame = CGRectMake(X, Y, Width, Height);
    btn.tag = //your tag Number;
    [btn addTarget:self action:@selector(showGameDetail:) forControlEvents:UIControlEventTouchUpInside];

И добавить этот метод

 -(IBAction)showGameDetail:(id)sender
 {
    //Your Code
 }
0 голосов
/ 26 мая 2011

попробуйте этот код

for (int i = 0; i < NPAGES; i++)
{
    UIView *menuView = [[[UIView alloc] initWithFrame:CGRectMake(i * 300.0f, 0.0f, 300.0f, 60.0f)] autorelease];

    for (j = 0; j < 5 ; j++)
    {
        UIImage *menuImage = [UIImage imageNamed:@"menuimage.png"];
        UIImage *menuImage2 = [UIImage imageNamed:@"menuimageselected.png"];
        UIButton *menuButton = [UIButton buttonWithType:UIButtonTypeCustom];
        menuButton.frame = CGRectMake(j * 60.0f, 0.0f, 60.0f, 60.0f);
        menuButton.backgroundColor = [UIColor clearColor];
        [menuButton setImage:menuImage forState:UIControlStateNormal];
        [menuButton setImage:menuImage2 forState:UIControlStateHighlighted];
        [menuButton setEnabled:YES];
        [menuButton addTarget:self action:@selector(someSelector)  forControlEvents:UIControlEventTouchUpInside];

        [menuView addSubview:menuButton];
    }

    [sv addSubview:menuView];
}

и убедитесь, что есть два изображения с именами menuimage.png и menuimageselected.png.

...