Создание представления вызова приложения для телефона в iPhone - PullRequest
1 голос
/ 14 декабря 2009

Я пытаюсь создать такой вид «всплывающего листа действий», похожий на вид во время вызова в приложении для телефона iPhone.

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

Так есть ли какой-нибудь библиотека / учебник / пример кода, который может помочь мне сделать что-то подобное? Спасибо.

альтернативный текст http://a1.phobos.apple.com/us/r1000/018/Purple/e1/23/02/mzl.uiueoawz.480x480-75.jpg

alt text
(источник: macblogz.com )

альтернативный текст http://ployer.com/archives/2008/02/29/iPhone%20infringes%20call%20display%20patent-thumb-480x799.png

1 Ответ

3 голосов
/ 14 декабря 2009

Все они выглядят по-разному, чтобы быть для меня обычным видом. Если вам просто нужен такой элемент управления для одного представления (т. Е. Не более гибко настраиваемый элемент управления типа контейнера), он должен быть относительно быстрым и простым в использовании в xcode & IB. Я делал подобные вещи в своих приложениях. Я бы предпринял следующие шаги:

1) создайте пустой файл NIB и создайте там свой элемент управления, используя элементы управления UIView, UIImageView, UIButton и т. Д.

2) Создать новый класс ObjC, производный от UIView

3) Убедитесь, что «корневой» объект UIView в NIB имеет тип класса, соответствующий вашему производному классу ObjC UIView

4) Присоедините обработчики событий IBOutlets и IBAction к вашему классу и подключите все события кнопки («Подправить внутри») к вашим методам обработчика событий класса в IB.

5) Добавьте статическую фабричную функцию в ваш класс, чтобы создать себя из NIB. например

// Factory method - loads a NavBarView from NavBarView.xib
+ (MyCustomView*) myViewFromNib;
{
    MyCustomView* myView = nil;
    NSArray* nib = [[NSBundle mainBundle] loadNibNamed:@"MyCustomViewNib" owner:nil options:nil];
    // The behavior here changed between SDK 2.0 and 2.1. In 2.1+, loadNibNamed:owner:options: does not
    // include an entry in the array for File's Owner. In 2.0, it does. This means that if you're on
    // 2.2 or 2.1, you have to grab the object at index 0, but if you're running against SDK 2.0, you
    // have to grab the object at index:1.
#ifdef __IPHONE_2_1
    myView = (MyCustomView *)[nib objectAtIndex:0];
#else
    myView = (MyCustomView *)[nib objectAtIndex:1];
#endif
    return myView;
}

6) Создайте и поместите в родительский вид как обычно:

    MyCustomView* myView = [MyCustomView myViewFromNib]; 
    [parentView addSubview:myView];
    myView.center = parentView.center;

Что касается обработки событий, я склонен создавать только один обработчик событий кнопки и использовать переданный параметр id, чтобы определить, какая кнопка нажата, путем сравнения с членами IBOutlet или тегами UIView. Я также часто создаю протокол делегата для своего пользовательского класса представления и перезваниваю через этого делегата из обработчика событий кнопки. например

MyCustomViewDelegate.h:

@protocol MyCustomViewDelegate
- (void) doStuffForButton1;
// etc
@end

ParentView.m:

myView.delegate = self;

- (void) doStuffForButton1
{
}

MyCustomView.m:

- (IBAction) onButtonPressed:(id)button
{
    if (button == self.button1 && delegate)
    {
        [delegate doStuffForButton1];
    }
    // or
    UIView* view = (UIView*)button;
    if (view.tag == 1 && delegate)
    {
        [delegate doStuffForButton1];
    }
}

Надеюсь, это поможет

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...