Iphone 建议,使用多个控件(UI按钮)
我会试着直奔主题 我想建立一个应用程序,将有超过500个控件(可能远远超过这个),我正试图设计的方法,我可以建立这个尽可能有效。快速概述: 每个控件(假设它是一个UIButton,也可能是其他控件)都会附加一种颜色。它们将是预定义的颜色,因此色轮对我来说不适用于此应用程序。所以我说,黑色、红色、蓝色……还有500多个。当我点击控件时,它会改变我背景的颜色。现在,我不认为我应该在IB中手动创建一个控件来容纳每种颜色。不知何故,手动过程似乎过时了,效率也不高 你们建议我做什么?我相信你们中的一些人是如何遇到这样的事情的,那些可能对如何实现或者至少对如何使用它没有很好的想法的人 我愿意接受建议:)您可以使用。它适用于类似的要求。我将尝试粘贴一篇详细解释它的博客文章 一些相关的SO职位包括: 您可以使用。它适用于类似的要求。我将尝试粘贴一篇详细解释它的博客文章 一些相关的SO职位包括:Iphone 建议,使用多个控件(UI按钮),iphone,objective-c,ipad,sdk,Iphone,Objective C,Ipad,Sdk,我会试着直奔主题 我想建立一个应用程序,将有超过500个控件(可能远远超过这个),我正试图设计的方法,我可以建立这个尽可能有效。快速概述: 每个控件(假设它是一个UIButton,也可能是其他控件)都会附加一种颜色。它们将是预定义的颜色,因此色轮对我来说不适用于此应用程序。所以我说,黑色、红色、蓝色……还有500多个。当我点击控件时,它会改变我背景的颜色。现在,我不认为我应该在IB中手动创建一个控件来容纳每种颜色。不知何故,手动过程似乎过时了,效率也不高 你们建议我做什么?我相信你们中的一些人是
我所做的是动态地建立一个由大约250个按钮组成的网格,并将它们放入popover中的滚动视图中。xib中唯一的元素是嵌入在视图中的scrollview。这是因为我是一个懒惰的mofo,不想动态创建滚动视图。当您知道网格的最终内容大小时,将其传递给scrollview 您可以将UIButton子类化,并添加UIColor属性或其他适用于您的系统的属性。将UIButtons触碰操作指向控制器上的单个选择器,并询问发送者其相关属性。因此,红色按钮的属性可能是
[UIColor redColor]
另一种方法是在颜色对象的控制器上保留一个数组,并将按钮标记设置为数组索引。这意味着您不必将UIButton子类化
假设这将在弹出/推送视图控制器内存时动态构建,这不会是一个问题,因为您将在关闭/弹出时将其全部丢弃
试试这个
-(void)viewDidLoad
{
[super viewDidLoad];
//collect all the objects
NSArray *array = [[NSBundle mainBundle] pathsForResourcesOfType:@"png" inDirectory:@"shapes"];
NSMutableArray *temp = [NSMutableArray arrayWithCapacity:[array count]];
for(NSString *path in array)
{
[temp addObject:[path lastPathComponent]];
}
shapeArray = [[NSArray arrayWithArray:temp] retain];
//compose into a grid of buttons
CGRect final = CGRectZero;
NSInteger count = 0;
NSInteger rowsize = 6;
for (NSString *shape in shapeArray) {
UIButton *button = [UIButton buttonWithType:UIButtonTypeCustom];
NSString *ipath = [[NSBundle mainBundle] pathForResource:[shape stringByDeletingPathExtension] ofType:[shape pathExtension] inDirectory:@"shapes"];
UIImage *image = [UIImage imageWithContentsOfFile:ipath];
[button setImage:image forState:UIControlStateNormal];
div_t temp = div(count, rowsize);
button.frame = CGRectMake(48 * temp.rem , 48*temp.quot, 48, 48);
button.tag = count++;
button.showsTouchWhenHighlighted = YES;
[button addTarget:self action:@selector(pickShape:) forControlEvents:UIControlEventTouchUpInside];
[scroller addSubview:button];
final = CGRectUnion(final, button.frame);
}
scroller.contentSize = final.size;
}
我所做的事情是动态地建立一个大约250个按钮的网格,并将它们放到弹出窗口中的滚动视图中。xib中唯一的元素是嵌入在视图中的scrollview。这是因为我是一个懒惰的mofo,不想动态创建滚动视图。当您知道网格的最终内容大小时,将其传递给scrollview 您可以将UIButton子类化,并添加UIColor属性或其他适用于您的系统的属性。将UIButtons触碰操作指向控制器上的单个选择器,并询问发送者其相关属性。因此,红色按钮的属性可能是
[UIColor redColor]
另一种方法是在颜色对象的控制器上保留一个数组,并将按钮标记设置为数组索引。这意味着您不必将UIButton子类化
假设这将在弹出/推送视图控制器内存时动态构建,这不会是一个问题,因为您将在关闭/弹出时将其全部丢弃
试试这个
-(void)viewDidLoad
{
[super viewDidLoad];
//collect all the objects
NSArray *array = [[NSBundle mainBundle] pathsForResourcesOfType:@"png" inDirectory:@"shapes"];
NSMutableArray *temp = [NSMutableArray arrayWithCapacity:[array count]];
for(NSString *path in array)
{
[temp addObject:[path lastPathComponent]];
}
shapeArray = [[NSArray arrayWithArray:temp] retain];
//compose into a grid of buttons
CGRect final = CGRectZero;
NSInteger count = 0;
NSInteger rowsize = 6;
for (NSString *shape in shapeArray) {
UIButton *button = [UIButton buttonWithType:UIButtonTypeCustom];
NSString *ipath = [[NSBundle mainBundle] pathForResource:[shape stringByDeletingPathExtension] ofType:[shape pathExtension] inDirectory:@"shapes"];
UIImage *image = [UIImage imageWithContentsOfFile:ipath];
[button setImage:image forState:UIControlStateNormal];
div_t temp = div(count, rowsize);
button.frame = CGRectMake(48 * temp.rem , 48*temp.quot, 48, 48);
button.tag = count++;
button.showsTouchWhenHighlighted = YES;
[button addTarget:self action:@selector(pickShape:) forControlEvents:UIControlEventTouchUpInside];
[scroller addSubview:button];
final = CGRectUnion(final, button.frame);
}
scroller.contentSize = final.size;
}
动态构建的功能将是巨大的。。。听起来是个可行的选择。我会记住你的答案。感谢动态构建的功能将是巨大的。。。听起来是个可行的选择。我会记住你的答案。谢谢