基于一些拼凑在一起的教程,我认为目前这是一个相当简单的应用程序.我在OSX 10.6.4中使用XCode 3.2.3.它起初是一个标准的iPhone"基于窗口的应用程序".使用界面构建器我在这里使用O'Reilly视频教程添加了一个Tab Bar Controller:
http://broadcast.oreilly.com/2009/06/tab-bars-and-navigation-bars-t.html
在第一个标签中,我有一个带有两个按钮的标准UIView.两者都调用相同的函数来显示UIImagePickerController:
-(IBAction) btnPhotoClicked:(id)sender {
UIImagePickerController *imagePicker = [[UIImagePickerController alloc] init];
imagePicker.delegate = self;
if((UIButton *)sender == btnChoosePhoto)
{
imagePicker.allowsEditing = YES;
imagePicker.sourceType = UIImagePickerControllerSourceTypeSavedPhotosAlbum;
} else {
imagePicker.sourceType = UIImagePickerControllerSourceTypeCamera;
}
[self presentModalViewController:imagePicker animated:YES];
[imagePicker release];
}
Run Code Online (Sandbox Code Playgroud)
我在模拟器中运行代码,所以只需单击"选择照片"按钮.当对话框与所选照片一起发布时,此功能运行:
-(void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary *)info {
NSURL *mediaUrl;
mediaUrl = (NSURL *)[info valueForKey:UIImagePickerControllerMediaURL];
if (mediaUrl == nil)
{
imagePuzzle = (UIImage *) [info valueForKey:UIImagePickerControllerEditedImage];
if(imagePuzzle == nil)
{
//--- Original Image was selected ---
imagePuzzle = (UIImage …Run Code Online (Sandbox Code Playgroud) 我已经能够在我的视图中为许多UI对象添加阴影,包括在UIImageView中放置一些自定义绘图.但是,当应用于UITextView时,相同的代码不会产生任何内容:
[desc.layer setShadowColor:[[UIColor blackColor] CGColor]];
[desc.layer setShadowRadius:2.0f];
[desc.layer setShadowOffset:CGSizeMake(1, 1)];
[desc.layer setShadowOpacity:0.8f];
Run Code Online (Sandbox Code Playgroud)
这是我缺少的东西吗?我希望用石英来添加边框和阴影.评论时边框代码确实有效:
//Border.
/*
[desc.layer setBackgroundColor:[[KookaSettings sharedInstance].cellBackgroundColorD CGColor]];
[desc.layer setBorderColor: [[UIColor blackColor] CGColor]];
[desc.layer setBorderWidth:1.0f];
[desc.layer setCornerRadius:8.0f];
*/
Run Code Online (Sandbox Code Playgroud) 我有一个非常简单的加载视图:
self.splashView = [[[NSBundle mainBundle] loadNibNamed:@"DownloadingData"
owner:nil options:nil] objectAtIndex:0];
[self.view addSubview:self.splashView];
Run Code Online (Sandbox Code Playgroud)
这是一个纵向模式的全高4"视网膜视图,状态栏,顶部栏和底栏设置为无.它有一些约束,使得图像沿底部对齐.我在应用程序中其他地方的控制器中使用类似视图,并调整大小进入可用空间(使用NavigationBar和TabBar)绝对没问题.但是这个直接从笔尖加载然后添加的视图似乎忽略了约束.
该视图适用于各种情况,例如,有/无导航条/标签栏的任意组合.
我已经试过的各种组合setNeedsLayout,setNeedsUpdateConstraints在splashView.我也试过调用layoutSubviews视图本身.
有人可以提供一些建议吗?在这种情况下,我应该采取另一种方式吗?或许使用viewController,或者在代码中手动添加约束?
我可以找到很多关于使对象支持多个协议但没有确认@property是否可以的问题.例如,我有一个属性为的类:
@property (strong) id dataSource;
Run Code Online (Sandbox Code Playgroud)
这里传入的对象支持UITableViewDataSource协议,所以我可以在没有问题的情况下分配它,没有警告:
self.tableView.dataSource = self.dataSource;
Run Code Online (Sandbox Code Playgroud)
我还要实现另一个协议,比如说,搜索,名为CustomControllerSearchDelegate.但是,如果我开始随机调用其他方法,ARC不出所料地开始抱怨.因此,我们沿着协议道路前进,在我的对象中定义它并使属性支持它.这会导致分配到表数据源时出现问题.那么对于主要问题,我可以这样做:
@property (strong) id <UITableViewDataSource, CustomControllerSearchDelegate> dataSource;
Run Code Online (Sandbox Code Playgroud)
如果不是什么是合适的选择?
或者,什么是强制删除此编译器警告的正确方法:
Assigning to 'id<UITableViewDataSource>' from incompatible type
'id<PickerViewControllerDataSource>'
Run Code Online (Sandbox Code Playgroud)
如果解释得不好,请道歉.:/
- 编辑 -
所以我的协议现在被定义为:
@protocol PickerViewControllerDataSource <UITableViewDataSource>
Run Code Online (Sandbox Code Playgroud)
该属性定义为:
@property (strong) id <PickerViewControllerDataSource> dataSource;
Run Code Online (Sandbox Code Playgroud)
然而,编译器抛出以下错误:
No known instance method for selector 'objectAtIndexPath:'
Run Code Online (Sandbox Code Playgroud)
- 编辑 -
以上在自定义协议中声明.宣言现为:
@protocol PickerViewControllerDataSource <UITableViewDataSource>
- (id)objectAtIndexPath:(NSIndexPath *)indexPath;
@optional
- (void)searchDataWithString:(NSString*)string;
- (void)cancelSearch;
@end
Run Code Online (Sandbox Code Playgroud)
谢谢.
objective-c ×3
iphone ×2
autolayout ×1
delegates ×1
ios6 ×1
properties ×1
protocols ×1
shadow ×1
uitextview ×1
uiview ×1
xcode ×1