처음에는 여전히 객관적이고 새로운 것을 배우기 위해 노력하고 있습니다.UIButton 이미지가 변경/업데이트되지 않음
지금은 프로그래밍 방식으로 만든 UIButton이 있습니다. 버튼을 누르면 UIActionSheet가 "카메라", "사진 선택"또는 "취소"중에서 선택됩니다. 버튼 이미지는 촬영 한 이미지 (카메라를 선택한 경우) 또는 이미지를 선택한 것으로 변경됩니다 (카메라 롤을 선택한 경우).
내 문제는 UIImagePicker를 닫은 후에 단추의 이미지가 변경되지 않는다는 것입니다. 처음에는 버튼이 tableView의 subView로 만들어졌고 tableView를 스크롤 할 때 버튼이 새로 고쳐지면서 이미지가 변경되었습니다 (이것이 내가 원하는대로 동작하는 방식이 아닙니다). 그러나 사용자가 이미지를 변경하거나 제거하려는 경우 버튼을 다시 누르면 UIActionSheet에 "사진 제거"라는 세 번째 선택 사항이 표시됩니다. tableView를 스크롤 한 후에 버튼 이미지가 전혀 변하지 않았 음을 알았습니다. 대신 새로운 버튼이 이전 버튼 위에 만들어 졌으므로 대신에 UDButton 코드를 viewDidLoad로 이동 시켰습니다 (stackoverflow에서 발견 된 일부 정보를 기반으로 함). 또한 스크롤을하지 않아도 tableView를 스크롤 할 수있는 기능을 제거했습니다.
나는 며칠 동안 UIImagePicker가 해제되거나 UIActionSheet가 해제 된 후 단추 또는보기를 새로 고치는 방법을 지금이 문제를 해결하기 위해 노력 해왔다. 나는 setNeedsLayout과 setNeedsDisplay를 사용해 보았지만 이것들은 내 문제를 해결하지 못했다. (나는 이것을 잘못된 장소에 놓을지도 모른다.) 바라건대 누군가가 이것에 대한 통찰력을 가지고 있으며,이 일을 제대로 수행 할 수 있도록 나를 인도 할 수 있습니다. 지금 내가있는 viewDidLoad 내있는 UIButton 코딩을 이동 한 것을 내가 코딩이 조각 어디에 넣을 것인가 확실하지 오전, 또한
- (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];
}
: 또한
{
if (picturePresent == NO) {
[cameraButton setTitle:@"Add\nPhoto" forState:UIControlStateNormal];
}
else if (picturePresent == YES) {
[cameraButton setImage:resizedImage forState:UIControlStateNormal];
}
}
setImage를하고 setBackgroundImage 두 있었다 또한 제공 내 코드입니다 사용하고 아직도 내가 원하는 방식으로 작동하지 않습니다. 더 많은 정보가 필요하면 알려주세요, 감사합니다! 편집
: 여기
내가 목표로하고 무엇을 보여주기 위해 스크린 샷입니다 -
"화상"그림을 표현하기 위해 가정한다 버튼 크기에 맞도록 선택되거나 조정 된 것입니다.
당신이 UIViewController의 멤버가된다는 의미를 더 설명 할 수 있습니까? 미안하지만 iOS 및 obj-c 프로그래밍에 아직 익숙하지 않습니다. – fresh
내일 알겠습니다. 현재 전화로 작업 중입니다. –
이 문제를 해결하기 위해 일주일이 지난 후에 코드가 트릭을했습니다. 그런 것들을 주셔서 감사하지만 간단하지만 훌륭한 솔루션입니다. – fresh