UIScrollView работает, только если дочерние представления не затронуты - PullRequest
0 голосов
/ 10 ноября 2009

У меня вид прокрутки, который не прокручивается вправо, я упростил код ниже. Он рисует вид и несколько горизонтальных кнопок, к которым я добавляю больше материала в реальном коде. Если вы перетаскиваете пробел между кнопками, вид прокручивается. Если вам случится положить палец на кнопку, она не будет прокручиваться. После соответствующего предложения я попытался добавить строку delaysContentTouches = YES, но, похоже, это не имеет значения. UIScrollview с UIButtons - как воссоздать трамплин?

Что я делаю не так? ТИА, Rob

Обновлен код

- (void)viewDidLoad {
    l = [self landscapeView];
    [self.view addSubview:l];
    [l release];    
}

- (UIScrollView *) landscapeView {
    // LANDSCAPE VIEW
    UIScrollView *landscapeView = [[UIScrollView alloc] initWithFrame:CGRectMake(0, 0, 320, 325)];
    landscapeView.backgroundColor = [UIColor whiteColor];
    landscapeView.delaysContentTouches = YES;
    NSInteger iMargin, runningY, n;
    iMargin = 3;
    runningY = iMargin;

    for (n = 1; n <= 38; n++) {
        //add day labels
        UIButton *templabel = [[UIButton alloc] initWithFrame:CGRectMake(iMargin,runningY,320 - ( 2 * iMargin),20)];
        templabel.backgroundColor = [UIColor grayColor];
        [landscapeView addSubview:templabel];
        [templabel release];
        runningY = runningY + 30;
    }
    landscapeView.contentSize = CGSizeMake( 320, runningY);

    return landscapeView; 
}

Ответы [ 2 ]

0 голосов
/ 20 ноября 2009

Похоже, что происходит следующее: геттер для landScapeView является сложным конструктором ... поэтому каждый раз, когда вы делаете [self landscapeView] или self.landscapeView, вы создаете совершенно новый UIScrollView и работаете с ним. .

Я бы попробовал что-то подобное в вашем .h файле:

@interface MyClass: MyParent {
  UIScrollView *landscapeView;
}

@property (retain) UIScrollView *landscapeView;

... и это в вашем файле .m:

@implementation MyClass

@synthesize landscapeView;

(void)viewDidLoad 
{ l = [[[UIScrollView alloc] initWithFrame:CGRectMake(0, 0, 320, 325)] autorelease];
  [self.view addSubview:self.landscapeView]; [l release]; 
  landscapeView.backgroundColor = [UIColor whiteColor];
  landscapeView.delaysContentTouches = YES;
   NSInteger iMargin, runningY, n;
  iMargin = 3;
  runningY = iMargin;
  for (n = 1; n <= 38; n++) { //add day labels 
       UIButton *templabel = [[UIButton alloc] initWithFrame:CGRectMake(iMargin,runningY,320 - ( 2 * iMargin),20)];
       templabel.backgroundColor = [UIColor grayColor]; 
       [landscapeView addSubview:templabel]; 
       [templabel release]; runningY = runningY + 30; 
  } 
  landscapeView.contentSize = CGSizeMake( 320, runningY);

}

0 голосов
/ 10 ноября 2009

Я не могу дублировать ваши результаты; когда я создаю scrollView и добавляю кнопки, прокрутка все еще активна даже при касании кнопки. Вы устанавливаете какие-либо другие свойства UIScrollView или подклассы любых методов, которые не отображаются в вашем упрощенном коде?

...