Динамическое расположение кнопок без жестких позиций кодирования - PullRequest
2 голосов
/ 14 июля 2009

Я хотел бы реализовать представление (оно фактически будет входить в нижний колонтитул UITableView), которое реализует 1-3 кнопки. Я бы хотел, чтобы расположение этих кнопок (и размер самих кнопок) менялось в зависимости от того, какие из них отображаются. Пример почти точного поведения, который мне нужен, находится в нижней части экрана «Информация» в приложении «Контакты», когда вы смотрите на конкретный контакт («Добавить в избранное» исчезает при щелчке, а другие кнопки раскрываются, чтобы занять доступное пространство в приятной анимации).

Поскольку я бегу по разным сценариям компоновки, я жестко кодирую все эти значения, и я просто думаю ... «Это НЕ тот способ, которым я должен это делать».

Даже кажется, что у Interface Builder есть некоторые функции, которые могут сделать это для меня на вкладке линейки, но я буду проклят, если смогу выяснить, как они работают (если они работают) на телефоне.

У кого-нибудь есть какие-либо предложения или онлайн-учебник, на который я мог бы обратить внимание, чтобы указать мне правильное направление?

Большое спасибо.

Ответы [ 2 ]

0 голосов
/ 02 марта 2013

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

-(void)addButtons:(int)numberOfButtons ToView:(UIView *)containerView;
{
    CGRect containerRect = containerView.frame;

    CGFloat padding = 5.0;
    CGFloat width = (containerRect.size.width - (padding*numberOfButtons+1))/numberOfButtons;
    for (int i = 1; i<=numberOfButtons; i++)
    {
        UIButton * btn = [[[UIButton alloc] initWithFrame:CGRectMake(i*padding+width, 0, width, containerRect.size.height)]autorelease];

        //set Button Properties like Target,backColor,Title,,,,etc  MUST SET TAG TO ACCESS THEM IN CLICK METHOD IF YOU ARE USING SAME SELECTOR FOR ALL BUTTONS.

        [containerView addSubview:btn];
    }

}

Попробуй это и повеселись ......

0 голосов
/ 14 июля 2009

Вы можете взглянуть на Stanford CS193P классы

Я думаю, что в одном из уроков / примера есть демонстрация, где они программно устанавливают авторазмер кнопок и другие, где они анимируют вид. Вы также можете сделать вид динамически устанавливающим ширину каждого своего подпредставления (ownWidth / numberofSubView), то же самое для позиции каждого элемента.

[править], как это? это еще не "динамично", но у вас есть идея Вы можете увеличивать / уменьшать количество кнопок при «добавлении / удалении» кнопки, а затем обнулять новый кадр всех подпредставлений

- (void)loadView
{

UIView *view = [[UIView alloc] initWithFrame:[[UIScreen mainScreen] applicationFrame]];
view.backgroundColor = [UIColor lightGrayColor];
view.autoresizingMask = UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight;

int numberOfbuttons = 2;
CGFloat buttonsLegth = (-20+view.bounds.size.width)/numberOfbuttons-20;
for(int i=0;i<numberOfbuttons;i++){
    CGRect buttonFrame = CGRectMake(0, 0, buttonsLegth, 37);
    buttonFrame.origin.x = (buttonFrame.size.width+20)*i + 20.0;
    buttonFrame.origin.y =  20.0;
    UIButton *button = [UIButton buttonWithType:UIButtonTypeRoundedRect]; // Autoreleased
    button.frame = buttonFrame;
    [button setTitle:@"Done" forState:UIControlStateNormal];
    [view addSubview:button];
    }
self.view = view;
[view release];
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...