使用Erica Sadun的滚动视图示例我创建了一个项目。 我现在在项目中有一个滚动视图和一个页面控件。 我为每个页面创建一个新视图,并将其添加到我的滚动视图中,如下所示。 每个视图有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];
答案 0 :(得分:1)
要在触摸时更改图像
[menuButton setImage:menuImage2 forState:UIControlStateHighlighted];
另外请确保您拥有menubutton.showTouchOnHighlight = YES;
和
menuButton.adjustImageWhenHighlighted = YES;
也许scrollView接受触摸事件。试试这些
scrollView.delaysContentTouches = NO;
scrollView.canCancelContentTouches = NO;
答案 1 :(得分:1)
我通过更改我添加到滚动视图的视图框架解决了这个问题。 所以不是这一行:
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中的视图也移动到同一帧。
答案 2 :(得分:0)
试试这段代码
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
的两张图片都在那里。
答案 3 :(得分:0)
请在您的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
}
答案 4 :(得分:0)
[menuImage release];
menuImage
不应该发布。它来自`[UIImage imageNamed:],它是一个自动释放的对象。它会导致图像过度释放。
答案 5 :(得分:0)
试试这个,我不确定它是否适用于你的情况。
[scrollView bringSubviewToFront:button];
答案 6 :(得分:0)
我会在“for”括号内声明“J”。
您正在保留UIButton,然后将其释放。您不需要这样做,因为您没有分配它。
您不应该发布“menuImage”。
您正在将“menuImage2”指定给UIButton的选定状态。它应该是UIControlStateHighlighted。
编辑:
不要这样做:
[menuImage release];
[menuButton release];
也试试这个:
- (void) menuButtonClicked: (id) sender { UIButton *btn = (UIButton *)sender; NSLog(@"clicked %d",[btn tag]); }