我正在尝试创建这种类似于iPhone手机应用程序中的通话视图的“弹出操作表”视图。
我相信这是一个自定义视图,因为我似乎无法在任何苹果引用中找到它。但不知何故,谷歌应用程序和发现应用程序都有这个视图,看起来非常相似(我已附上下面的图像)。
那里有某种类型的库/教程/示例代码可以帮我制作这样的东西吗? 感谢。
alt text http://a1.phobos.apple.com/us/r1000/018/Purple/e1/23/02/mzl.uiueoawz.480x480-75.jpg
(来源:macblogz.com)
答案 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];
}
}
希望有所帮助