web-dev-qa-db-ja.com

UIImagePickerControllerで[キャンセル]ボタンが表示されませんか?

ここでは、以下のコードを使用しています。誰かがこの問題を知っているなら私を助けてください。以下のURLも試しましたが、機能しません。私を助けてください

iOS7 UIImagePickerControllerキャンセルボタンが消えますIPopoverController内のUIImagePickerControllerはiOS7のキャンセルボタンを表示しません

UIImagePickerController *picker = [[UIImagePickerController alloc] init];
picker.delegate = self;
picker.allowsEditing = YES;
picker.sourceType = UIImagePickerControllerSourceTypePhotoLibrary;
[self presentViewController:picker animated:YES completion:NULL];
picker.navigationBar.tintColor = [UIColor redColor];
picker.navigationBar.barStyle = UIBarStyleBlackOpaque;
picker.navigationBar.topItem.rightBarButtonItem.tintColor = [UIColor blackColor];

私の問題: enter image description here

私の要求: enter image description here

13
Venkatesh G

これは私のために働いたものです:

    present(imagePicker, animated: true, completion: {
        imagePicker.navigationBar.topItem?.rightBarButtonItem?.tintColor = .black
    })
8
Lucas

すべての努力がうまくいかない場合は、appearance()メソッドを使用する必要があります。したがって、表示する任意のビューコントローラ(UIImagePickerController)に次の行を記述してみてください。外観はどのクラスでも使用できますが、UIBarButtonItem.appearance()を他の目的で使用した可能性があるため、それを見つけて、viewDidDisappear()でそのコードを記述します。

UIBarButtonItem.appearance().setTitleTextAttributes([NSAttributedStringKey.foregroundColor: UIColor.red], for: .normal)
UIBarButtonItem.appearance().setTitleTextAttributes([NSAttributedStringKey.foregroundColor: UIColor.red], for: .highlighted)

コントローラーにtopItemがない前に、UIImagePickerControllerの色合いの色を変更するだけでは実行できなかったため、Appleはそれを間違えました(iOS 10、Xcode 8))のように見えます。プロパティ、またはnavigationControllerプロパティ。UIImagePickerController extensionで変更を行いました。しかし、これらのオーバーライドされたメソッドでnavigationControllertopItemをチェックしました:viewDidLoadviewWillAppearviewDidAppear。しかし、それでもnilでした。それで、viewWillLayoutSubviewsでチェックすることにしました。出来上がりです!ゼロではなかったので、ここで正確なrightBarButtomItemのバーの色合いの色を設定できます!

次に例を示します。

    extension UIImagePickerController {
        open override func viewWillLayoutSubviews() {
            super.viewWillLayoutSubviews()
            self.navigationBar.topItem?.rightBarButtonItem?.tintColor = UIColor.black 
            self.navigationBar.topItem?.rightBarButtonItem?.isEnabled = true
        }
    }

Exampel on simulator (but it tested on )

そして、super.viewWillLayoutSubviewsを呼び出すことを忘れないでください、それは非常に重要です;-)編集:しかし、アルバム画面に戻ったときにまだ問題があります。

2
KostiaZzz

Swift 4.2 Solution、AppDelegateのdidFinishLaunchingWithOptionsに以下のコードを追加します

UINavigationBar.appearance(whenContainedInInstancesOf: [UIImagePickerController.self]).tintColor = .black
1
iOS Lifee

あなたが投稿したのと同じコードを使用しました。 「キャンセル」ボタンが表示されます。

 UIImagePickerController *picker = [[UIImagePickerController alloc] init];
    picker.delegate = self;
    picker.allowsEditing = YES;
    picker.sourceType = UIImagePickerControllerSourceTypePhotoLibrary;
    [self presentViewController:picker animated:YES completion:NULL];
    picker.navigationBar.tintColor = [UIColor redColor];
    picker.navigationBar.barStyle = UIBarStyleBlackOpaque;
    picker.navigationBar.topItem.rightBarButtonItem.tintColor = [UIColor blackColor];
    [self presentViewController:picker animated:YES completion:NULL];

カスタムナビゲーションバーを使用していて、アプリデリゲートのプロパティをナビゲーションnarの色合いの色を変更するように設定している可能性があります。

enter image description here

1
Manoj Singhal

一部のアイテムプロパティを更新するとボタンが表示されるように見えるので、次のように有効にします。

present(imagePicker, animated: true, completion: {
    self.imagePicker.navigationBar.topItem?.rightBarButtonItem?.isEnabled = true
})
1
Isaac Bosca

ViewControllerをNavigationControllerに埋め込んでいないと思います

それを実行してコードを試してください:(目的--c)

-(void)viewDidLoad
{
    [super viewDidLoad];

    UIImagePickerController *picker = [[UIImagePickerController alloc] init];
    picker.delegate = self;
    UIImagePickerController *imagePickerController = [[UIImagePickerController alloc] init];
    imagePickerController.sourceType = UIImagePickerControllerSourceTypePhotoLibrary;
    imagePickerController.delegate = self;
    [self presentViewController:imagePickerController animated:YES completion:nil];  
}    

-(void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary *)info
    {
        UIImage *image = [info valueForKey:UIImagePickerControllerOriginalImage];
        [picker dismissViewControllerAnimated:YES completion:^{
        }];

    UIImageView *imageview=[[UIImageView alloc]initWithFrame:CGRectMake(0, 0, 100, 300)];
    imageview.image=image;
}
1
Ashok Londhe

上記のいずれかがうまくいかない場合は、UIImagePickerControllerを定義するときにこれを追加してみてください

    imagePicker.modalPresentationStyle = .popover // Or.fullScreen (Can also check cases for iPad and iPhone as per requirement)

チャームのように私のために働いた。これによってかなりバグがありました

1
UIImagePickerController *imgPicker=[[UIImagePickerController alloc]init];    
imgPicker.delegate = self;
imgPicker.navigationBar.barStyle = UIBarStyleBlackOpaque;
UIImagePickerControllerSourceType sourceType = UIImagePickerControllerSourceTypePhotoLibrary;
imgPicker.allowsEditing = NO;

if([UIImagePickerController isSourceTypeAvailable: sourceType])
{
    imgPicker.sourceType=sourceType;
    [self presentViewController:imgPicker animated:YES completion:NULL];
}
0
Chandan

Swift 3以上でこのコードを試してください

let picker = UIImagePickerController()

picker.navigationBar.topItem?.rightBarButtonItem?.tintColor = UIColor.white
0
Furkan Vijapura

以下のようにUIPickerViewControllerをサブクラス化します。

class CustomImagePicker: UIImagePickerController {

    override func viewWillAppear(_ animated: Bool) {
        super.viewWillAppear(animated)

        UINavigationBar.appearance().tintColor = UIColor.black
        UIBarButtonItem.appearance().setTitleTextAttributes([NSAttributedString.Key.foregroundColor : UIColor.init(red: 0.0, green: 122.0/255.0, blue: 1.0, alpha: 1.0)], for: .normal)
    }

    override func viewWillDisappear(_ animated: Bool) {

        UINavigationBar.appearance().tintColor = UIColor.white // your color
        UIBarButtonItem.appearance().setTitleTextAttributes(nil, for: .normal)
        super.viewWillDisappear(animated)

    }

}

そして、次のように使用します。

func openGallary()
    {
        picker!.sourceType = UIImagePickerController.SourceType.photoLibrary
        picker!.modalPresentationStyle = .currentContext
        self.present(picker!, animated: true, completion: nil)
    }
0
Avijit Nagare

uIImagePickerControllernavigationBar.tintColorを変更して次のコードを試してください:

UINavigationBar *bar = [self.navigationController navigationBar];
    [bar setTintColor:[UIColor blueColor]];
0
Jay Bhalani

私はこの種の同じ問題に直面していて、多くの時間を無駄にした後、私は解決策を見つけました。この問題が発生した理由を以下のコードのようにナビゲーションバーの外観をカスタマイズしました。

    UINavigationBar.appearance().backIndicatorImage = UIImage(named: "ic_left")
    let attributes = [NSAttributedString.Key.font: UIFont(name: "FuturaPT-Medium", size: 16)!]
    UINavigationBar.appearance().titleTextAttributes = attributes
    UINavigationBar.appearance().setBackgroundImage(UIImage(named: "line.png"),for: .bottom,barMetrics: .default)
    UINavigationBar.appearance().shadowImage = UIImage(named: "line.png")

UIBarButtonItem.appearance()。setTitleTextAttributes([NSAttributedString.Key.foregroundColor:UIColor.clear]、for:.normal)

これはナビゲーションバーのカスタム外観であり、タイトルの色をクリアに設定しているため、コードの最後の行を変更する必要があります。これは本当にとても簡単です。イメージピッカーコントローラーを提示する前に、このコードを入力してください。

UIBarButtonItem.appearance()。setTitleTextAttributes([NSAttributedString.Key.foregroundColor:UIColor.black]、for:.normal)

また、ナビゲーションバーのボタンのタイトルが必要ない場合は、テキストの色をクリアにします。 ありがとう

0
Yuvraj Sinh

これは私のために働いた:

let BarButtonItemAppearance = UIBarButtonItem.appearance()

BarButtonItemAppearance.setTitleTextAttributes([NSForegroundColorAttributeName: .blue), NSFontAttributeName: UIFont.boldSystemFont(ofSize: 16.0)], for: .normal)
0
jeydiz