2012-03-26 2 views
0

У меня есть представление, где я показываю изображение и изображение в виде сетки. Как показано на изображении. show imageЦель C: Grid View в iPad проблема при удалении объекта

Теперь для того же я беру один UIButton с изображением в качестве фона и UILabel и позиционируя его соответственно на экране. Теперь, когда я нажимаю на UIButton, он показывает UIActionSheet с возможностью удаления, просмотра и отмены. Теперь проблема здесь. Когда я нажимаю «Удалить» только для одной записи, запись удаляется, но если больше одной записи есть, то дает проблемы при удалении, что она показывает удаленную запись.

Чтобы добавить UIButton и UILabel:

-(void)showImageFrame 
{ 
    int FrameWidth = 190; 
    int Frameheight = 196; 
    int FrameX; 
    int FrameY; 

    int lblWidth = 190; 
    int lblHeight = 40; 
    int lblX,lblY; 

    settButton = [UIButton buttonWithType:UIButtonTypeCustom]; 
    [settButton setImage:[UIImage imageNamed:@"Picture frame.png"] forState:UIControlStateNormal]; 
    [settButton addTarget:self action:@selector(pressSelectedImage:) forControlEvents:UIControlEventTouchDown]; 

    btnInnerImg = [UIButton buttonWithType:UIButtonTypeCustom]; 
    [btnInnerImg addTarget:self action:@selector(pressSelectedImage:) forControlEvents:UIControlEventTouchDown]; 

    lblImgName = [[UILabel alloc]init]; 
    lblImgName.font = [UIFont boldSystemFontOfSize:30]; 
    lblImgName.textAlignment = UITextAlignmentCenter; 
    lblImgName.textColor = [UIColor whiteColor]; 
    lblImgName.backgroundColor = [UIColor clearColor]; 


     for(int i = 0;i<cnt1;i++) 
     { 
      [settButton setTag:i]; 
      img = [[appDelegate.DataArray objectAtIndex:i]valueForKey:@"ProfileImage"]; 

      [btnInnerImg setImage:img forState:UIControlStateNormal]; 
      [btnInnerImg setTag:i]; 

      lblImgName.text = [[appDelegate.DataArray objectAtIndex:i]valueForKey:@"strNameImg"]; 
      [lblImgName setTag:i]; 

      if(i==0) 
      { 
       FrameX = 35;FrameY = 119;btnX = 49;btnY=134;lblX = 35;lblY=337; 
      } 
      if(i==1) 
      { 
       FrameX = 289;FrameY = 119;btnX = 303;btnY=134;lblX = 289;lblY=337; 
      } 
      if(i==2) 
      { 
       FrameX = 545;FrameY = 119;lblX = 545;lblY=337;btnX = 558;btnY=134; 
      } 
      if(i==3) 
      { 
       FrameX = 802;FrameY = 119;lblX = 802;lblY=337;btnX = 816;btnY=134; 
      } 
      if(i==4) 
      { 
       FrameX = 35;FrameY = 411;lblX = 35;lblY=629;btnX = 49;btnY=426; 
      } 
      if(i==5) 
      { 
       FrameX = 289;FrameY = 411;lblX = 289;lblY=629;btnX = 303;btnY=426; 
      } 
      if(i==6) 
      { 
       FrameX = 545;FrameY = 411;lblX = 545;lblY=629;btnX = 558;btnY=426; 
      } 
      if(i==7) 
      { 
       FrameX = 802;FrameY = 411;lblX = 802;lblY=629;btnX = 816;btnY=426; 
      } 

      [settButton setFrame:CGRectMake(FrameX,FrameY,FrameWidth,Frameheight)]; 
      [lblImgName setFrame:CGRectMake(lblX,lblY,lblWidth,lblHeight)]; 
      [btnInnerImg setFrame:CGRectMake(btnX,btnY,btnWidth,btnHeight)]; 

      [newButtonArray addObject:settButton]; 
      [self.view addSubview: settButton];  
      [self.view addSubview: lblImgName];  
      [self.view addSubview: btnInnerImg]; 
     } 
} 

Чтобы удалить UIButton и UILabel:

-(void)removeImageFrame 
{ 
    [settButton removeFromSuperview]; 
    [btnInnerImg removeFromSuperview]; 
    [lblImgName removeFromSuperview]; 

    settButton = nil; 
    btnInnerImg = nil; 
    lblImgName = nil;   
} 

Я не хочу использовать UITableViewCell для вида сетки. Также, что я делаю, это то, что при удалении 1 записи я удаляю все записи и перезагружаю их снова в соответствии с записью. Я знаю, что делаю ошибку в методе removeImageFrame, но не могу найти то же самое. Надеюсь, кто-то может помочь мне удалить единственный UIButton с разными тегами. Спасибо.

+0

Действительно ли это отображает сетку? Вы создаете одну кнопку, а затем изменяете ее свойства и повторно добавляете ее в супервизор. – jrturton

+0

да, он отлично показывает. также, когда есть только одна запись, она удалена так же хорошо. Проблема возникает только тогда, когда есть больше одной записи. – Sarah

+0

есть ли другой способ справиться с тем же ?? – Sarah

ответ

1

Было бы хорошо, чтобы увидеть немного больше контекста (метод действий и, как вы получите от нажатия на кнопку, чтобы удалить кнопку), но вот несколько советов:

  • Удалить все объекты из вашей кнопки array в начале showImageFrame
  • Создайте новые кнопки (с локально объявленными переменными, а не ivar) внутри цикла.
  • Не используйте тег 0, то есть тег по умолчанию, что все виды имеют
  • Когда кнопка прослушиваются, пытаются передать это в качестве аргумента метода removeImageFrame - это то, что sender для.
  • Вы также можете посмотреть фоновые изображения и изображения переднего плана для одной кнопки, вместо того, чтобы иметь одну кнопку для рамки и одну для изображения
  • (не связанный с вашей проблемой) попытайтесь найти лучший способ для отображения сетки, чем координаты жесткого кодирования. Что это устройство повернуто?
+0

Я думаю, вы правы. Я не знаю, почему я сделал такое плохое кодирование. :(В любом случае спасибо за ваши советы. Я буду следовать за ними и +1 за вашу поддержку. Спасибо. – Sarah

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