2014-01-30 3 views
1

Я создал 5 UIView динамически, который состоит из одного UILabel и одного UIButton каждый. Когда я нажимаю кнопку, UIView будет setHidden. Но он работает только на одном не другом четырех uiviews.UnEven Поведение UIView при setHidden

@interface ViewController : UIViewController 
    { 
     NSMutableArray *newViews; 

    } 
    @property(nonatomic,retain)IBOutlet UILabel *welcome; 
    @property(nonatomic,retain)CustomView *custom; 
     -(void)buttonPressed:(UIButton *)sender; 
    @end 



    - (void)viewDidLoad 
    { 
     [super viewDidLoad]; 

     NSString *[email protected]"string of length"; 

     int length=[name length]; 

     newViews = [NSMutableArray array]; 

     NSMutableArray *myArray = [NSMutableArray arrayWithObjects:@"cricket",   @"golf",@"wrestling", @"FootBall is good game", nil]; 

int yAxis=44; 

int lengthOfArray=[myArray count]; 

for(int a=0; a<=lengthOfArray; a++){ 
    self.custom= [[CustomView alloc]initWithFrame:CGRectMake(20, yAxis, 100, 44)]; 
     yAxis=yAxis+50; 
     NSLog(@"yaxis is %i",yAxis); 
     self.custom.tag=200+a; 

    [newViews addObject:self.custom]; 
    self.custom.Label = [[UILabel alloc]initWithFrame:CGRectMake(5,5, length+70, 30)]; 
    self.custom.button=[[UIButton alloc]initWithFrame:CGRectMake(85,10,12,10)]; 
    UIImage *btnImage = [UIImage imageNamed:@"button_droparrow.png"]; 
    [self.custom.button setImage:btnImage forState:UIControlStateNormal]; 
    [self.custom.button addTarget:self      action:@selector(buttonPressed:)forControlEvents:UIControlEventTouchDown]; 

    self.custom.button.tag=self.custom.button.tag+a; 

    self.custom.backgroundColor=[UIColor greenColor]; 

    [email protected]"welcome"; 

    custom.Label.backgroundColor = [UIColor yellowColor]; 

    [self.custom addSubview:self.custom.button]; 

    [self.custom addSubview:custom.Label]; 

    [self.view addSubview:self.custom]; 
} 

    [self.custom.button addTarget:self      action:@selector(buttonPressed:)forControlEvents:UIControlEventTouchDown]; 
    } 


- (void)didReceiveMemoryWarning 
    { 
    [super didReceiveMemoryWarning]; 

} 

-(void)buttonPressed:(UIButton *)sender 
{ 
    [self.custom setHidden:YES]; 

    } 

    @end 

Просьба помочь. Я новичок в разработке iOS. Мне нужно здесь, чтобы создать UIView с ссылкой differrnt, и эта ссылка назначает UIButton, чтобы закрыть этот конкретный UIView, но я не смог получить результат.

+0

Вы только скрываете 'self.custom', который заканчивается тем, что указывается только на последний созданный вами CustomView. – rmaddy

+0

да, это была проблема, как я создаю ссылку для каждого uivew, которая была проблемой, но вживую ... –

ответ

0

Если вы хотите использовать свойства, вам нужно будет сделать свойство для каждого вида. Вместо этого, если вы хотите создать их динамически, вы можете сохранить ссылки на каждое представление в массиве.

Следующее, что вы должны знать/сделать, - это добавить тег к каждой кнопке. Тег - это просто число, которое в этом случае должно ссылаться на его позицию в массиве.

Затем на основе тега кнопки, который вы можете получить от отправителя, вы можете получить правильную кнопку просмотра/из массива и изменить на нем свойство «Скрытый».

Например (псевдо-код/​​это обыкновение компиляции):

создание массива Просмотров

@property (неатомической, сильный) NSMutableArray * вид;

В Виде же нагрузка создать точку

views = [[NSMutableArray alloc] init]; 

int nrOfViews = 5; 

for(int a=0; a<=nrOfViews; a++){ 
    UIView *view = create UIView here. 
    UIButton *button = create button here. 
    [view addSubView: button]; 
    [button setTag: a]; 
    [views addObject: view]; 
} 

ссылку на вид через указатель сохраняется в массиве, найти правильную, основанные на кнопку теге.

-(void)buttonPressed:(UIButton *)sender 
{ 
    UIView *view = [views objectAtIndex: sender.tag]; //using the button tag to identify the right view. 
    [view setHidden: yes]; 

} 
+0

спасибо, что он отлично работает –

+0

вы можете мне помочь. теперь мне нужно создать uiview, который должен быть того же размера uilable, который является подвидным для этого представления. –

+0

@khaskheli_ayaz Вы должны опубликовать новый вопрос, который, я думаю, включая код, который у вас уже есть. – ophychius

-1

Вам необходимо внести некоторые изменения в следующем

@property(nonatomic,strong)IBOutlet UILabel *welcome; // new arc code 
@property(nonatomic,strong)UIView *custom; // new arc code 

self.custom = [[UIView alloc]initWithFrame:CGRectMake(20, yAxis, 100, 44)]; 
0

Попробуйте что-то вроде этого:

- (void) buttonPressed: (UIButton*) sender 
{ 
    UIView* view = sender.superview; 
    view.hidden = YES; 
} 
+0

спасибо, что она отлично работает. –

+0

если мой ответ полезен, вы можете пометить его как правильно. спасибо – stosha

+0

сэр мне нужно создать uiview в соответствии с размером uilabel, можете ли вы помочь мне в этом отношении ... –

1

Вы можете использовать UISegmentedControl наряду с числом XIb для каждого UIView.

  • В каждом UIView вы можете разместить необходимую UIControls и связать то же самое.
  • В методе делегата SegmentedControl 'indexDidChangeForSegmentedControl:(UISegmentedControl *)sender' по каждому индексу удалите предыдущий UIView и добавьте требуемый UIView.

В главном файле заголовка добавить IBOutlet для каждого UIView

@property (nonatomic, weak) IBOutlet UIView *view1; 
@property (nonatomic, weak) IBOutlet UIView *view2; 

В .m файла в делегатой методе '' indexDidChangeForSegmentedControl

- (IBAction)indexDidChangeForSegmentedControl:(UISegmentedControl *)sender { 

    NSUInteger index = sender.selectedSegmentIndex; 

    if (UISegmentedControlNoSegment != index) { 

     if (currentIndex == index) { 
      return; 
     } 

     currentIndex = index; 
     switch (index) { 
      case 0: 
       { 
        [self.previousView removeFromSuperview]; 
        [self.view addSubview:view1]; 
        self.previousView = view1; 
       } 
       break; 

      case 1: 
       { 
        [self.previousView removeFromSuperview]; 
        [self.view addSubview:view2]; 
        self.previousView = view2; 
       } 
       break; 
     } 
    } 
} 

Надеется, что это помогает.

Смежные вопросы