我在一个页面中有一个按钮网格。我希望按钮在单击时指向另一个视图。我应该在以下操作中添加什么来更改视图?
-(void)buttonPressed:(UIButton *)button {
NSLog(@"button %u -- frame: %@", button.tag, NSStringFromCGRect(button.frame));
}
按钮网格使用:
创建{
int rows = 13, columns = 4;
UIView *buttonView = [[UIView alloc] initWithFrame:CGRectMake(0.f, 0.f, 80*columns, 32*rows)];
int currentTag = 0;
for (int y = 0; y < rows; y++) {
for (int x = 0; x < columns; x++) {
UIButton * button = [UIButton buttonWithType:UIButtonTypeCustom];
// [button.layer setBorderWidth:1.0];
// [button.layer setBorderColor:UIColor blackColor]];
button.backgroundColor=[UIColor colorWithRed: 201.0/255.0 green: 201.0/255.0 blue:201.0/255.0 alpha: 1.0];
button.tag = currentTag;
currentTag++;
[button.layer setBorderColor: [[UIColor blackColor] CGColor]];
[button.layer setBorderWidth: 1.0];
[button setTitle:[NSString stringWithFormat:@"%d",currentTag] forState:UIControlStateNormal];
button.frame = CGRectMake(80*x, 32*y, 80, 32);
[button addTarget:self action:@selector(buttonPressed:) forControlEvents:UIControlEventTouchUpInside];
[buttonView addSubview: button];
}
}
// Center the view which contains your buttons
CGPoint centerPoint = buttonView.center;
centerPoint.x = self.view.center.x;
buttonView.center = centerPoint;
[self.view addSubview:buttonView];
}
答案 0 :(得分:0)
也许你想连接一个动作?
[button addTarget:self
selector:@selector(buttonPressed:)
forControlEvents:UIControlEventTouchUpInside];
(检查语法,这是通过内存...)
答案 1 :(得分:0)
Rinju的答案可行,但需要更多解释。我不确定为什么你想要创建这个按钮网格(更多信息会很好),但如果你想让每个按钮显示一个新视图,那么标签很重要!
如果要打开相同的视图,但该视图上显示的属性不同,则需要创建一个新的视图控制器类。我们称之为DetailViewController
。
现在,在您的buttonPressed:
方法中,您将需要实例化此视图控制器并设置它的属性!
@interface DetailViewController : UIViewController
@property (nonatomic, assign) int buttonTag;
...
//other methods, properties, etc. here
...
@end
现在,在按钮所在的视图控制器中,您可以这样做(为了简单起见,我假设您正在使用故事板。如果没有,它仍然可以轻松完成,类似于Rinju所做的)。
-(void)buttonPressed:(UIButton*)button {
[self performSegueWithIdentifier:@"DetailView" sender:button];
}
现在,您可以实现prepareForSegue
方法,该方法在segue触发之前调用:
-(void)prepareForSegue:(UIStoryboardSegue*)segue sender:(id)sender {
if( [[segue identifier] isEqualToString:@"DetailView"] ) {
DetailViewController *detailView = [segue destinationViewController];
detailView.buttonTag = ((UIButton*)sender).tag;
}
}
现在为新的详细信息视图控制器设置了标记,您可以在DetailViewController的viewDidLoad:
中使用switch语句(或者更好的是,传递此buttonTag的模型对象)来设置UI那里。基本上我们正在做的是使用按钮的标签来区分按下哪个按钮,并在此基础上创建一个新视图!
您可能想要做的是创建一个typedef enum
结构来为标签创建名称而不是使用原始整数。这样可以提高代码的可读性,也可以帮助您避免混淆;)
答案 2 :(得分:-2)
-(void)buttonPressed:(UIButton *)button
{
NSLog(@"button %u -- frame: %@", button.tag, NSStringFromCGRect(button.frame));
Cart *crtObj=[[Cart alloc]initWithNibName:@"Cart" bundle:nil];
[self.navigationController pushViewController:crtObj animated:YES];
[crtObj release];
}