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