まず最初に、私はまだobjective-cの新人ですが、私ができる限り多くのことを学ぼうとしています。UIButtonイメージが変更/更新されていません
今私はプログラムで作成したUIButtonを持っています。ボタンを押すと、「カメラ」、「写真を選択」または「キャンセル」の選択肢が表示されます。ボタン画像は、撮影された画像(カメラが選択された場合)または画像が選択された場合(カメラロールが選択された場合)に変更されると想定されます。
私の問題は、UIImagePickerを終了するとボタンのイメージが変化しないことです。最初はボタンがtableViewのサブビューとして作成され、tableViewをスクロールしたときにボタンが更新され、画像が変更されました(これはもちろん私がそれを動作させたかったわけではありません)。ただし、ユーザーが画像を変更または削除することを決定した場合は、ボタンをもう一度押すだけで、UIActionSheetは「写真を削除」の3番目の選択肢を表示します。 tableViewをスクロールした後、私はボタンイメージが全く変わっていないことに気付きました。新しいボタンが古いボタンの上に作成されたので、代わりにviewDidLoadにUIButtonコードを移動しました。また、スクロールする必要がないので、tableViewのスクロール機能も削除しました。
私はこの問題を数日間解決しようとしていますが、UIImagePickerが終了したか、UIActionSheetが終了した後、ボタンまたはビューを適切にリフレッシュする方法がありました。私はsetNeedsLayoutとsetNeedsDisplayを使用しようとしましたが、これらは私の問題を解決するために働いていません(私は間違った場所にこれらを置いているかもしれません)。うまくいけば、誰かがこれについての洞察力を持っており、この仕事をするための適切な方法で私を導くことができます。さらに
- (void)viewDidLoad {
[super viewDidLoad];
// Do any additional setup after loading the view.
// Creates camera button and connects to camera menu UIActionSheet
UIButton *cameraButton = [UIButton buttonWithType:UIButtonTypeCustom];
[cameraButton addTarget:self action:@selector(showActionSheet:) forControlEvents:UIControlEventTouchUpInside];
cameraButton.titleLabel.lineBreakMode = UILineBreakModeWordWrap;
cameraButton.titleLabel.textAlignment = UITextAlignmentCenter;
cameraButton.frame = CGRectMake(9, 230, 80, 80);
[self.view addSubview:cameraButton];
picturePresent = NO;
NSLog(@"picturePresent = %@", picturePresent);
}
-(void)showActionSheet:(id)sender {
if (picturePresent == NO) {
UIActionSheet *cameraMenuSheet = [[UIActionSheet alloc] initWithTitle:@"Add Photo"
delegate:self
cancelButtonTitle:@"Cancel"
destructiveButtonTitle:nil
otherButtonTitles:@"Camera", @"Choose Photo", nil];
[cameraMenuSheet showFromTabBar:self.tabBarController.tabBar];
}
else if (picturePresent == YES) {
UIActionSheet *cameraMenuSheet = [[UIActionSheet alloc] initWithTitle:@"Add Photo"
delegate:self
cancelButtonTitle:@"Cancel"
destructiveButtonTitle:nil
otherButtonTitles:@"Remove Photo", @"Camera", @"Choose Photo", nil];
[cameraMenuSheet showFromTabBar:self.tabBarController.tabBar];
}
}
- (void)actionSheet:(UIActionSheet *)actionSheet clickedButtonAtIndex:(NSInteger)buttonIndex {
NSString *title = [actionSheet buttonTitleAtIndex:buttonIndex];
// Initialize UIImagePickerController
if ([title isEqualToString:@"Camera"]) {
// Camera
UIImagePickerController *imagePicker = [[UIImagePickerController alloc] init];
imagePicker.sourceType = UIImagePickerControllerSourceTypeCamera;
imagePicker.delegate = self;
imagePicker.allowsEditing = NO;
imagePicker.showsCameraControls = YES;
imagePicker.mediaTypes = [NSArray arrayWithObjects:(NSString *)kUTTypeImage, nil];
[self presentModalViewController:imagePicker animated:YES];
newMedia = YES;
}
else if ([title isEqualToString:@"Choose Photo"]) {
// Photo library
UIImagePickerController *imagePicker = [[UIImagePickerController alloc] init];
imagePicker.sourceType = UIImagePickerControllerSourceTypeSavedPhotosAlbum;
imagePicker.delegate = self;
imagePicker.allowsEditing = NO;
imagePicker.mediaTypes = [NSArray arrayWithObjects:(NSString *)kUTTypeImage, nil];
[self presentModalViewController:imagePicker animated:YES];
newMedia = NO;
}
else if ([title isEqualToString:@"Remove Photo"]) {
picturePresent = NO;
}
}
- (void)actionSheet:(UIActionSheet *)actionSheet didDismissWithButtonIndex:(NSInteger)buttonIndex {
[self.view setNeedsDisplay];
}
// Method for saving image to photo album
- (void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary *)info {
NSString *mediaType = [info objectForKey:UIImagePickerControllerMediaType];
if ([mediaType isEqualToString:(NSString *)kUTTypeImage]) {
// Access the uncropped image from info dictionary
UIImage *image = [info objectForKey:@"UIImagePickerControllerOriginalImage"];
UIImage *scaledImage = [image scaleToSize:CGSizeMake(80.0, 80.0)];
if (newMedia == YES) {
// Save image
UIImageWriteToSavedPhotosAlbum(image, self, @selector(image:didFinishSavingWithError:contextInfo:), nil);
}
resizedImage = scaledImage;
}
picturePresent = YES;
[self dismissModalViewControllerAnimated:NO];
}
-(void)imagePickerControllerDidCancel:(UIImagePickerController *)picker {
[self dismissModalViewControllerAnimated:YES];
}
、今私はのviewDidLoadにコーディング私のUIButtonを移動したことを私はコーディングのこの作品を置く場所がわからないよ::
{
if (picturePresent == NO) {
[cameraButton setTitle:@"Add\nPhoto" forState:UIControlStateNormal];
}
else if (picturePresent == YES) {
[cameraButton setImage:resizedImage forState:UIControlStateNormal];
}
}
もsetImageとsetBackgroundImageは両方だった。また、私のコードで提供私はそれが欲しいと思っています。もっと情報が必要な場合は、私に教えてください、ありがとう! EDIT
:ここ
は私が目指していますかを示すためにいくつかのスクリーンショットです -
"ピクチャー" 画像を表現するために仮定されますボタンのサイズに合わせて選択または拡大縮小されます。
あなたはそれをUIViewControllerのメンバにすることによって何を意味するかをさらに説明できますか?申し訳ありませんが、私はまだiOSとobj-cのプログラミングに新しいです。 – fresh
私は明日になります。現時点で電話で作業しています。 –
この問題の周りに私の頭を包み込むことを1週間おきにして、あなたのコードはトリックをしました。そのようなシンプルだが素晴らしいソリューションをありがとう。 – fresh