在iPhone中创建电话应用程序的通话中视图

时间:2009-12-14 15:58:28

标签: iphone objective-c user-interface uikit

我正在尝试创建这种类似于iPhone手机应用程序中的通话视图的“弹出操作表”视图。

我相信这是一个自定义视图,因为我似乎无法在任何苹果引用中找到它。但不知何故,谷歌应用程序和发现应用程序都有这个视图,看起来非常相似(我已附上下面的图像)。

那里有某种类型的库/教程/示例代码可以帮我制作这样的东西吗? 感谢。

alt text http://a1.phobos.apple.com/us/r1000/018/Purple/e1/23/02/mzl.uiueoawz.480x480-75.jpg

alt text
(来源:macblogz.com

alt text http://ployer.com/archives/2008/02/29/iPhone%20infringes%20call%20display%20patent-thumb-480x799.png

1 个答案:

答案 0 :(得分:3)

对我来说,它们看起来都是不同的自定义视图。如果您只想在单个视图中使用这样的控件(即,不是更灵活的可配置容器类型控件),那么它应该相对快速且相对较快。很容易在xcode& IB。我在我的应用程序中做过类似的事情。我将采取的步骤如下:

1)创建一个空的NIB文件,并使用UIView,UIImageView,UIButton控件等设计你的控件。

2)创建一个从UIView派生的新ObjC类

3)确保NIB中的“root”UIView对象具有与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];
    }
}

希望有所帮助