Objective c 用户定义的iOS界面

Objective c 用户定义的iOS界面,objective-c,user-interface,Objective C,User Interface,导言 我正在编写一个应用程序,其中屏幕上的界面可以根据上一屏幕上的用户输入而变化。我现在要做的是加载x个滑块,从上一个屏幕中得到x。我面临的真正问题是,我使用的每个滑块不都必须命名和定义吗?我已经想到了一种方法来做到这一点,但我不完全确定如何实施,如果你能建议我,我将不胜感激 伪代码 -(void) loadInterface { // Set up a frame CGRect myFrame = CGRectMake(10.0f, 100.0f, 250.0f, 25.0f)

导言

我正在编写一个应用程序,其中屏幕上的界面可以根据上一屏幕上的用户输入而变化。我现在要做的是加载x个滑块,从上一个屏幕中得到x。我面临的真正问题是,我使用的每个滑块不都必须命名和定义吗?我已经想到了一种方法来做到这一点,但我不完全确定如何实施,如果你能建议我,我将不胜感激

伪代码

-(void) loadInterface {
    // Set up a frame
    CGRect myFrame = CGRectMake(10.0f, 100.0f, 250.0f, 25.0f);

    for (int i = 0; i < x; i++) {
            [self newSlider]
        // Retrieve info here about the slider and pass it to newSlider
    }

}

-(void) newSlider (info about slider) {

    // Here I need the code to load a slider
    // If I use something like this:
    // UISlider *slider1 = [[UISlider alloc] initWithFrame:myFrame];
    // The next time this method is loaded the slider will be overwritten right?

}
-(void)加载接口{
//架
CGRect myFrame=CGRectMake(10.0f、100.0f、250.0f、25.0f);
对于(int i=0;i
您可以使用NSMutableDictionary来跟踪所有滑块,尽管您可能根本不需要它

newSlider
中,您创建了一个滑块,您应该通过

这样创建的所有滑块将显示在创建它们的位置,并且不会消失,除非将它们从视图中删除

您可以将此代码段作为如何创建滑块的示例:

CGRect frame = CGRectMake(0.0, 0.0, 200.0, 10.0);
UISlider *slider = [[UISlider alloc] initWithFrame:frame];
[slider addTarget:self action:@selector(sliderAction:) forControlEvents:UIControlEventValueChanged];
如果正确定义了
frame
,则可以使所有滑块在UI中对齐

当用户执行滑块操作时,将调用
sliderAction:
方法,该方法有一个引用滑块的参数:

- (void)sliderAction:(UISlider* slider) {
   ...
}
因此,您确切地知道哪个滑块被操作,这通常足以处理该操作

在任何情况下,如我所说,如果要跟踪所有滑块,请在创建时将它们添加到NSDictionary:

[self.sliderDict setObject:newSlider forKey:@"nth-slider-name"];

每个滑块不需要新变量,因为在
newSlider
方法中使用的
UISlider
实例的范围仅限于该方法。这意味着一旦程序退出该方法,变量就可以自由使用

您还应该将滑块传递给该方法,然后可以使用该滑块定位滑块,并为视图提供一个标记供以后使用:

-(void) loadInterface {
    // Set up a frame
    CGRect myFrame = CGRectMake(10.0f, 100.0f, 250.0f, 25.0f);

    for (int i = 0; i < x; i++) {
        [self newSlider:i]
        // Retrieve info here about the slider and pass it to newSlider
    }

}

-(void) newSlider:(int)sliderNumber {
    UISlider *slider = [[UISlider alloc] initWithFrame:CGRectMake(0, sliderNumber * 100, 320, 50)];
    slider.tag = sliderNumber;
    [self.view addSubview:slider];
}
-(void)加载接口{
//架
CGRect myFrame=CGRectMake(10.0f、100.0f、250.0f、25.0f);
对于(int i=0;i
您希望的滑块最大数量是多少?可能是5个或6个,问题是我想将其应用于其他可能更复杂的自定义界面部件,我可以根据字符串命名它们吗?这将解决问题,我想请定义“根据字符串命名”类似于:NSString*myString=@“SliderName”;UISlider*myString=[[UISlider alloc]initWithFrame:myFrame];
-(void) loadInterface {
    // Set up a frame
    CGRect myFrame = CGRectMake(10.0f, 100.0f, 250.0f, 25.0f);

    for (int i = 0; i < x; i++) {
        [self newSlider:i]
        // Retrieve info here about the slider and pass it to newSlider
    }

}

-(void) newSlider:(int)sliderNumber {
    UISlider *slider = [[UISlider alloc] initWithFrame:CGRectMake(0, sliderNumber * 100, 320, 50)];
    slider.tag = sliderNumber;
    [self.view addSubview:slider];
}