Двигаться влево и вправо в UIScrollView

У меня есть UIScrollView, который прокручивается только по горизонтали. У меня есть ситуация, когда у меня есть представления, заполненные массивом в UIScrollView. В UIScrollView есть три вида, которые вместе составляют один компонент (таких компонентов много). Компонент содержит:

  • UILabel
  • UIButton
  • UIView (для основного текста)

Я поместил две клавиши со стрелками (влево и вправо) на концах UIScrollView. При касании стрелки влево я сдвигаю на одну позицию влево (с полной строкой для отображения) в UIScrollView и на одну позицию вправо (с полной строкой для отображения) в случае кнопки со стрелкой вправо.

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

Я знаю, что это странно, что у меня есть UIScrollView, и я все еще хочу добавить клавиши со стрелками для его перемещения. Но ничего не могу поделать. Это требование клиента. Вот как я реализовал действие со стрелкой влево:

-(IBAction) onClickLeftArrow
{
    NSLog(@"BUTTON VALUE : %i",iButtonValue);
    if(iButtonValue <= [m_BCListArray count]) {
        NSArray *arr = [scrollDemo subviews];
        for(int j = 0; j < [arr count]; j++) {
            UIView *view1 = [arr objectAtIndex:j];
            [view1 removeFromSuperview];
        }
        XX = 5.0;
        int tagcount = [m_BCListArray count]-iButtonValue;
        NSLog(@"%@",m_BCListArray);
        for(int i = iButtonValue; i >= 1; i--)
        {
            UILabel *blabel = [[UILabel alloc] initWithFrame:CGRectMake(XX, 6, 120, 26)];
            blabel.text = [m_BCListArray objectAtIndex:[m_BCListArray count]-i];
            blabel.backgroundColor = [UIColor clearColor];
            blabel.textColor = [UIColor whiteColor];
            blabel.font = [UIFont systemFontOfSize:14];
            [scrollDemo addSubview:blabel];

            //underline code
            CGSize expectedLabelSize = [[m_BCListArray objectAtIndex:[m_BCListArray count]-1] sizeWithFont:blabel.font constrainedToSize:blabel.frame.size lineBreakMode:UILineBreakModeWordWrap];
            CGRect newFrame = blabel.frame;
            newFrame.size.height = expectedLabelSize.height;
            blabel.frame = CGRectMake(blabel.frame.origin.x, blabel.frame.origin.y, expectedLabelSize.width+10, expectedLabelSize.height);
            blabel.numberOfLines = 1;
            [blabel sizeToFit];
            int width=blabel.bounds.size.width;
            int height=blabel.bounds.size.height;

            UIButton *btnContent = [UIButton buttonWithType:UIButtonTypeCustom];
            [btnContent addTarget:self action:@selector(SelectButton:)forControlEvents:UIControlEventTouchDown];
            btnContent.tag = tagcount+1;
            btnContent.frame=CGRectMake(XX, 2.0, width+10, height);
            [scrollDemo addSubview:btnContent];
            scrollDemo.contentSize = CGSizeMake(XX+50, 32);
            //scrollDemo.contentSize = CGSizeMake(expectedLabelSize.width,expectedLabelSize.height);

            UIView *viewUnderline=[[UIView alloc] init];
            viewUnderline.frame=CGRectMake(XX, 26, width, 1);
            viewUnderline.backgroundColor=[UIColor whiteColor];
            [scrollDemo addSubview:viewUnderline];
            [viewUnderline release];

            scrollDemo.contentSize = CGSizeMake(XX+width+10, 32);
            XX = XX + width+10;
            iRight  = iRight + 1;
            tagcount ++;
          //  iRight --;
        }
    }   
    iButtonValue = iButtonValue+1;
}

person Nitish    schedule 26.09.2011    source источник
comment
Пожалуйста, объясните больше... Что вы имеете в виду, вы должны полностью отображать строку? И что ты имеешь в виду под сдвигом на одну позицию влево? Вы хотите, чтобы следующий вид пришел в центр, указывая, что он выбран в данный момент?   -  person stack2012    schedule 26.09.2011
comment
Под полной строкой я подразумеваю, что полная строка должна помещаться на экране (а не наполовину скрыта). Очень длинная строка будет исключением.   -  person Nitish    schedule 26.09.2011
comment
А как насчет положения строки? это должно быть по центру или что-то в этом роде?   -  person stack2012    schedule 26.09.2011
comment
У вас есть строка ur как текст UILabel, верно?   -  person stack2012    schedule 26.09.2011
comment
Сдвиг на одну позицию влево означает, что при касании кнопки со стрелкой влево будет показана предыдущая строка (которая будет отображаться на метке). И если коснуться кнопки со стрелкой вправо, будет показана строка, следующая за текущей строкой.   -  person Nitish    schedule 26.09.2011
comment
Я хочу отобразить первую строку в начале прокрутки.   -  person Nitish    schedule 26.09.2011
comment
Да, строка должна отображаться на uilabel.   -  person Nitish    schedule 26.09.2011


Ответы (1)


Установите contentOffset UIScrollView для действия нажатия кнопки, и вы получите желаемый эффект.

person Shubham    schedule 16.02.2012