判斷控件圖片或背景圖片是否被更改

在對於圖片上傳操作時,我們需要先將圖片展示給用戶,然後點擊按鈕將圖片上傳。那麼我們在點擊上傳按鈕的時候,如果用戶沒有進行更改,我們就直接上傳,要麼是是空圖片,要麼是原始的默認圖。而我們的目的是保證用戶選擇圖片並上傳,而不是上傳默認圖片。那麼怎麼區分圖片是否已經選擇好了呢? 對我而言,有兩種方法:

      1.申明全局變量保存圖片 每當選擇一張圖片,就將圖片賦值給全局的變量進行保存,但是如果需要展示和上傳的圖片過多時, 不僅需要創建大量的全局變量,而且在選擇照片後還需要判定選擇的是第幾張

     以展示和上傳兩張圖片爲例:

         首先創建兩個全局變量 image1, image2

    

@interface ASDUploadForMenHuFragment () <UIActionSheetDelegate, UINavigationControllerDelegate, UIImagePickerControllerDelegate>

@property (weak, nonatomic) IBOutlet UIButton *cardFrontButton;
@property (weak, nonatomic) IBOutlet UIButton *co_Button;

@property (strong, nonatomic) UIImage *image1;
@property (strong, nonatomic) UIImage *image2;

@end


在選擇照片後,對照片選擇器的回調做處理

- (void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary<NSString *,id> *)info {
    //當選擇的類型是圖片
    //先把圖片轉成NSData
    UIImage* image = [info objectForKey:UIImagePickerControllerOriginalImage];
    //關閉相冊界面
    __weak __typeof(self)weakSelf = self;
    [picker dismissViewControllerAnimated:YES completion:^{
        dispatch_async(dispatch_get_main_queue(), ^{
            if (selectedButton == weakSelf.cardFrontButton) {
               image1 = image;
               [weakSelf.cardFrontButton setBackgroundImage:image forState:UIControlStateNormal];
            } else if (selectedButton == weakSelf.co_Button) {
                image2 = image;
                [weakSelf.co_Button setBackgroundImage:image forState:UIControlStateNormal];
            }
        });
    }];
}

點擊上傳按鈕的時候,我們進行判斷的標準則爲image1 與image2 是否爲空

- (void)uploadImage {
    if (image1 == nil) {
         NSLog(@"image1未選擇或更改");
         return;
    }
     if (image2 == nil) {
         NSLog(@"image2未選擇或更改");
         return;
    }

    //以下爲選擇照片並更改後的操作的代碼
}


以上代碼雖然解決了驗證的問題,但是一旦展示和需要上傳的照片過多,則需要創建很多的全局變量保存,代碼會變得很冗長,且不好維護。


    2.通過方法 setAccessibilityIdentifier ,設置標識符, 可減少代碼量及方便代碼閱讀

     同樣以展示和上傳兩張照片爲例:

   

@interface ASDUploadForMenHuFragment () <UIActionSheetDelegate, UINavigationControllerDelegate, UIImagePickerControllerDelegate>

@property (weak, nonatomic) IBOutlet UIButton *cardFrontButton;
@property (weak, nonatomic) IBOutlet UIButton *co_Button;

@end

在viewdidLoad 方法中,我們設置展示按鈕圖片的默認標示

- (void)viewDidLoad {
    [super viewDidLoad];
    //設置圖片默認標識符  此處標識符可以隨意寫
    [self.cardFrontButton.currentBackgroundImage setAccessibilityIdentifier:@"S_cardFront"];
    [self.co_Button.currentBackgroundImage setAccessibilityIdentifier:@"S_RenZheng"];
}

在選擇完圖片之後,在照片選擇器的回調中,我們將默認的標識符進行改變

   

- (void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary<NSString *,id> *)info {
    //當選擇的類型是圖片
    //先把圖片轉成NSData
    UIImage* image = [info objectForKey:UIImagePickerControllerOriginalImage];
    //關閉相冊界面
    __weak __typeof(self)weakSelf = self;
    [picker dismissViewControllerAnimated:YES completion:^{
        dispatch_async(dispatch_get_main_queue(), ^{
            if (selectedButton == weakSelf.cardFrontButton) {
                [weakSelf.cardFrontButton setBackgroundImage:image forState:UIControlStateNormal];
                //改變默認圖片標識符
               [weakSelf.cardFrontButton.currentBackgroundImage setAccessibilityIdentifier:@"imagePicked"];
            } else if (selectedButton == weakSelf.co_Button) {
                [weakSelf.co_Button setBackgroundImage:image forState:UIControlStateNormal];                
                //改變默認圖片標識符
                [weakSelf.co_Button.currentBackgroundImage setAccessibilityIdentifier:@"imagePicked"];
            }
        });
    }];
}

在uploadImage方法中,我們就可以根據以上的設置,找出標識符進行判斷

- (IBAction)uploadImageEvent:(UIButton *)sender {
    //獲取相應的標識符
    NSString *imageName1 = [self.cardFrontButton.currentBackgroundImage accessibilityIdentifier];
    NSString *imageName2 = [self.co_Button.currentBackgroundImage accessibilityIdentifier];
    //將標識符進行判斷
    if ([imageName1 isEqualToString:@"S_cardFront"] && [imageName2 isEqualToString:@"S_RenZheng"]) {
        ShowTips(@"請先選擇要上傳的照片");
        return;
    }
    ShowIndicator_InView(self.view, @"正在上傳照片");
    [self imageUpload];
}

以上我們就可以很好的進行圖片是否有過更改的判斷, 不需要創建一大堆的全局變量進行保存, 在上傳圖片的時候,就可以直接取相應控件的圖片值進行上傳。看起來還是即簡單也方便了很多。


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章