2015-09-06 3 views
1

У меня есть 2 ярлыка.Что касается iCarousel и этикеток iOS

Первый ярлык под названием «ярлык» помещается внутри каждого вида внутри карусели. Строка/текст метки - это индекс представления.

label.text = [[items1 objectAtIndex:index] stringValue]; 

У меня также есть второй ярлык (за пределами карусели) под названием «outsideLabel». Я хочу, чтобы строка/текст externalLabel также был индексом представления (всегда вид был перед карусели).

outsideLabel.text = [[items1 objectAtIndex:index] stringValue]; 

Как-то я делаю это неправильно, и интересно, как я закодировать это для того, чтобы показать нужное количество в outsideLabel в строке/текст (всегда вид, находясь в передней). Код несколько показывает правильные номера, но перепутался при прокрутке назад в карусели. Тип карусели - это время.

Мой текущий код:

- (UIView *)carousel:(iCarousel *)carousel viewForItemAtIndex:(NSInteger)index reusingView:(UIView *)view 
{ 
    //create new view if no view is available for recycling 
    if (view == nil) 
    { 
     view = [[UIImageView alloc] initWithFrame:CGRectMake(0, 0, 200.0f, 200.0f)]; 

     view.contentMode = UIViewContentModeCenter; 
     label = [[UILabel alloc] initWithFrame:view.bounds]; 
     label.backgroundColor = [UIColor clearColor]; 
     label.textColor = [UIColor whiteColor]; 

     if (carousel == carousel1) 
     { 

     CGRect test = CGRectMake(10, 10, 20, 20); 
     self.label.frame = test; 

     } 
     else { 
      CGRect test = CGRectMake(50, 40, 40, 40); 
      self.label.frame = test; 

      } 
     [view addSubview:label]; 

    } 
    else 
    { 
     label = [[view subviews] lastObject]; 
    } 

    if (carousel == carousel1) 
    { 
     //items in this array are numbers 
     outsideLabel.text = [[items1 objectAtIndex:index] stringValue]; 

     label.text = [[items1 objectAtIndex:index] stringValue]; 

     ((UIImageView *)view).image = [UIImage imageNamed:[view1background objectAtIndex:index]]; 

    } 
    else 
    { 

     //not relevant.... 
    } 

    return view; 
} 
+0

Вы пробовали делегировать метод iCarousel - - (void) carouselCurrentItemIndexDidChange: (iCarousel *) carousel? Попробуйте установить значение здесь .. надеюсь, это может помочь u – Nayan

ответ

0

Она смотрит на меня, как вы хотите «машину времени» в стиле карусель. Я не вижу, чтобы ваш код устанавливал тип карусели в любом месте. Вам не нужно устанавливать тип карусели?

+0

Я устанавливаю тип в методе viewDidLoad. И да, это уже timemachine. Тем не менее, я вижу только одну карту вместо нескольких карт. – user1293618

+0

Вы посмотрели демонстрационные приложения iCarousel? Они включают рабочую демонстрацию взгляда Time Machine. (Прошло некоторое время с тех пор, как я создал новый iCarousel, поэтому я не помню детали с головы). –

2

Из кода, который вы указали, похоже, что вы не инициализируете outsideLabel в нужном месте. Чтобы быть в безопасности, вы должны инициализировать все свои объекты в блоке, где вы проверяете, есть ли вид nil. Другим безопасным соглашением является назначение тегов для всех ваших подзонов, чтобы впоследствии вы могли извлекать их из просмотров, которые повторно используются, как в приведенном ниже коде. Для удобства и во избежание ошибок, я определить константы для этих тегов в верхней части моего файла реализации, как это:

#define INSIDE_LABEL_TAG 1 
#define OUTSIDE_LABEL_TAG 2 

Это намного безопаснее, так как она не зависит от структуры взглядов , как и в случае с кодом, где вы получите последний вид:

label = [[view subviews] lastObject]; 

Попробуйте инициализацию outsideLabel внутри этот блок, и использовать тег. Шаблон используется при инициализации идентичен тому, который используется для подвидов из UITableView клеток в UITableViewDataSource делегатом:

(UITableViewCell * _Nonnull)tableView:(UITableView * _Nonnull)tableView 
       cellForRowAtIndexPath:(NSIndexPath * _Nonnull)indexPath 

Вот некоторые псевдо-код, который показывает, где я хотел бы использовать теги и инициализировать outsideLabel:

- (UIView *)carousel:(iCarousel *)carousel viewForItemAtIndex:(NSInteger)index reusingView:(UIView *)view 
{ 
    //create new view if no view is available for recycling 
    if (view == nil) 
    { 
     //Configure the view 
     ... 

     /* Initialize views for all carousels */ 

     //Initialize the insideLabel and set its tag 
     ... 
     insideLabel.tag = INSIDE_LABEL_TAG; 

     //Initialize the outsideLabel and set its tag 
     ... 
     outsideLabel.tag = OUTSIDE_LABEL_TAG; 

     if (carousel == carousel1) 
     { 
      //Do any carousel-specific configurations 
     } 

     //Add all subviews initialized in this block 
     [view addSubview:label]; 
     [view addSubview:outsideLabel]; 
    } 
    else 
    { 
     //Get the subviews from an existing view 
     insideLabel = (UILabel *)[view viewWithTag:INSIDE_LABEL_TAG]; 
     outsideLabel = (UILabel *)[view viewWithTag:OUTSIDE_LABEL_TAG]; 
    } 

    if (carousel == carousel1) 
    { 
     //Set the values for each subview 
    } else { 
     //Other carousels... 
    } 

    return view; 
}