UIActionSheet с изображением - PullRequest
       3

UIActionSheet с изображением

2 голосов
/ 22 ноября 2011

Ради Бога, кто-нибудь подскажет, как добавить изображение в UIActionSheet.

Я добавляю его, но не могу заставить лист пересчитать его высоту, поэтому подпредставление подойдет.

var sheet = new UIActionSheet ("Sheet with a picture");
sheet.AddButton ("Pick New Picture");

var subView = new UIView(new RectangleF(20,100,280,200)){ 
    BackgroundColor = UIColor.FromPatternImage(Picture)};

sheet.AddSubview(subView);
sheet.AddButton ("Cancel");
sheet.CancelButtonIndex = 1;

Я пытался изменить contentMode для subView и листа. Не сработало Что я делаю неправильно? enter image description here

Изображение должно помещаться между кнопками или располагаться на листе любым другим способом вокруг

Ответы [ 4 ]

12 голосов
/ 23 ноября 2011

Я знаю, это звучит действительно глупо, но самое простое решение, которое я нашел, - это добавить несколько фиктивных кнопок (для экономии места), а затем поверх них добавить UIImageView, точно определяющий координаты кадра.

var sheet = new UIActionSheet ("");
sheet.AddButton ("Discard Picture");
sheet.AddButton ("Pick New Picture");
sheet.AddButton ("Cancel");
sheet.CancelButtonIndex = 2;

// Dummy buttons to preserve the space for the UIImageView
for (int i = 0; i < 4; i++) {
    sheet.AddButton("");
    sheet.Subviews[i+4].Alpha = 0; // And of course it's better to hide them
}

var subView = new UIImageView(Picture);
subView.ContentMode = UIViewContentMode.ScaleAspectFill;
subView.Frame = new RectangleF(23,185,275,210);

// Late Steve Jobs loved rounded corners. Let's have some respect for him
subView.Layer.CornerRadius = 10; 
subView.Layer.MasksToBounds = true;
subView.Layer.BorderColor = UIColor.Black.CGColor;
sheet.AddSubview(subView);

enter image description here

2 голосов
/ 17 июля 2012

На самом деле это довольно просто, и вам не нужен взлом:

Измените размер UIActionSheet ПОСЛЕ вызова showInView (или showFromTabBar и т. Д.), Как они делают в в этом примере .

Возможно, вам придется изменить Рамку вместо границ, по моему опыту, лист действий не перемещается в правильное положение, если вы измените границы.

На iPad это нене работает к сожалению.Но там вы можете использовать UIPopoverController.(Совет: вы можете использовать 0 для UIPopoverArrowDirection, если вам не нужны стрелки).

2 голосов
/ 23 ноября 2011

UIActionSheet не поддерживает настройку этого типа. Вы можете создать подкласс UIActionSheet и отбросить макет по умолчанию (переопределить layoutSubviews, вызвать супер реализацию, а затем переместить вещи). Если вы сделаете это, нет гарантии, что ваш подкласс будет работать в будущих версиях iOS, если Apple изменит реализацию фреймворка.

Другая альтернатива - найти или реализовать альтернативный класс, который делает то, что вы хотите.

1 голос
/ 31 июля 2012

Это ответ Агзама, но он обновлен для самого последнего объекта и без взлома фоновой кнопки, как предполагает Марсель В. Он короче и, возможно, чище.

 UIActionSheet *actionSheet = [[UIActionSheet alloc] init];
  actionSheet.actionSheetStyle = UIActionSheetStyleAutomatic;
  actionSheet.title = @"some text";//here type your information text
  actionSheet.delegate = self;

  [actionSheet addButtonWithTitle:@"Button 1"];
  [actionSheet addButtonWithTitle:@"Button 2"];
  [actionSheet setCancelButtonIndex:1];

//it is up to you how you show it, I like the tabbar
  [actionSheet showFromTabBar:self.tabBarController.tabBar];

//here lays the trick - you change the size after you've called show 
  [actionSheet setBounds:CGRectMake(0,0,320, 480)];

//now create and add your image
   UIImageView *subView = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"exampleimage.png"]];
   subView.ContentMode = UIViewContentModeScaleAspectFit;
   subView.Frame = CGRectMake(0,130,320,180);//adjust these, so that your text fits in
   [actionSheet addSubview: (subView)];
   [subView release];

  [actionSheet release];    
...