Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/iphone/41.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Iphone 建议,使用多个控件(UI按钮)_Iphone_Objective C_Ipad_Sdk - Fatal编程技术网

Iphone 建议,使用多个控件(UI按钮)

Iphone 建议,使用多个控件(UI按钮),iphone,objective-c,ipad,sdk,Iphone,Objective C,Ipad,Sdk,我会试着直奔主题 我想建立一个应用程序,将有超过500个控件(可能远远超过这个),我正试图设计的方法,我可以建立这个尽可能有效。快速概述: 每个控件(假设它是一个UIButton,也可能是其他控件)都会附加一种颜色。它们将是预定义的颜色,因此色轮对我来说不适用于此应用程序。所以我说,黑色、红色、蓝色……还有500多个。当我点击控件时,它会改变我背景的颜色。现在,我不认为我应该在IB中手动创建一个控件来容纳每种颜色。不知何故,手动过程似乎过时了,效率也不高 你们建议我做什么?我相信你们中的一些人是

我会试着直奔主题

我想建立一个应用程序,将有超过500个控件(可能远远超过这个),我正试图设计的方法,我可以建立这个尽可能有效。快速概述:

每个控件(假设它是一个UIButton,也可能是其他控件)都会附加一种颜色。它们将是预定义的颜色,因此色轮对我来说不适用于此应用程序。所以我说,黑色、红色、蓝色……还有500多个。当我点击控件时,它会改变我背景的颜色。现在,我不认为我应该在IB中手动创建一个控件来容纳每种颜色。不知何故,手动过程似乎过时了,效率也不高

你们建议我做什么?我相信你们中的一些人是如何遇到这样的事情的,那些可能对如何实现或者至少对如何使用它没有很好的想法的人

我愿意接受建议:)

您可以使用。它适用于类似的要求。我将尝试粘贴一篇详细解释它的博客文章

一些相关的SO职位包括: 您可以使用。它适用于类似的要求。我将尝试粘贴一篇详细解释它的博客文章

一些相关的SO职位包括:

我所做的是动态地建立一个由大约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;

}

动态构建的功能将是巨大的。。。听起来是个可行的选择。我会记住你的答案。感谢动态构建的功能将是巨大的。。。听起来是个可行的选择。我会记住你的答案。谢谢