2017-01-10 4 views
0

画面の下部に表示されているように、選択するオプションがあります。 長い文字列を完全に表示できるように、このメニューには他にどのオプションがありますか?長いオプション文字列にはどのオプションがありますか?

あなたは1がそれを行うためのカスタマイズを行う必要があり、あなたの要件については

optionmenu

+1

なぜあなたは試してみませんか? – dirtydanee

+0

@dirtydanee何を試してみませんか?私はそれを行うためのエレガントな方法を求めています。 – iDesireJustice

+0

1つのオプションに複数行のテキストを表示する方法を試してみてください。それが不可能なら(それは?)、次に小さいテキストがおそらくあなたの次の最良の賭けです。 –

答えて

1

このコードを使用してみてください:

using System; 
using System.Collections.Generic; 
using CoreGraphics; 
using UIKit; 

namespace CusActionSheet 
{ 
    public delegate void OneParameterEventHandler<T>(T data); 

    public class ALActionSheet : UIView 
    { 
     private nfloat maximumProportion = 0.8f; 

     public event OneParameterEventHandler<string> RowClicked; 

     //You also can use this if you don't know the generic(but remeber also change it for source): 
     //public delegate void OneParameterEventHandler(string data); 
     //public event OneParameterEventHandler SelectedPhoneNumber; 

     private UIView backgroundContainer; 
     private UIView topContainer; 
     private UILabel topContainerTitleView; 
     private UITableView topContainerTable; 
     private ALActionSheetSource topContainerTableSource; 

     private UIButton btnCancel; 

     private nfloat itemPadding = 10; 
     private nfloat itemHeight = 60; 
     private nfloat cornerRadius = 10; 

     private List<string> dataList; 

     private CGRect backContainerShownFrame; 
     private CGRect backContainerHiddenFrame; 

     private string selectedNumber; 

     public CGRect BackContainerShownFrame 
     { 
      get 
      { 
       return backContainerShownFrame; 
      } 

      set 
      { 
       backContainerShownFrame = value; 
      } 
     } 

     public ALActionSheet(List<string> _dataList) 
     { 
      this.BackgroundColor = UIColor.Clear; 
      this.dataList = _dataList; 

      backgroundContainer = new UIView(); 
      backgroundContainer.Layer.CornerRadius = cornerRadius; 
      backgroundContainer.Layer.MasksToBounds = true; 

      topContainer = new UIView(); 
      topContainer.BackgroundColor = UIColor.White; 
      topContainer.Layer.CornerRadius = cornerRadius; 
      topContainer.Layer.MasksToBounds = true; 

      topContainerTitleView = new UILabel(); 
      topContainerTitleView.Text = "Select a number"; 
      topContainerTitleView.TextAlignment = UITextAlignment.Center; 
      topContainerTitleView.BackgroundColor = UIColor.FromRGB(230, 230, 230); 
      topContainer.AddSubview(topContainerTitleView); 

      topContainerTableSource = new ALActionSheetSource(dataList); 
      topContainerTableSource.RowClicked += (data) => 
      { 
       selectedNumber = data; 
       Close(); 
      }; 

      topContainerTable = new UITableView(); 
      topContainerTable.RowHeight = itemHeight; 
      topContainerTable.Layer.CornerRadius = cornerRadius; 
      topContainerTable.Layer.MasksToBounds = true; 
      topContainerTable.BackgroundColor = UIColor.White; 
      topContainerTable.Source = topContainerTableSource; 
      topContainer.AddSubview(topContainerTable); 

      btnCancel = new UIButton(UIButtonType.System); 
      btnCancel.SetTitle("Cancel", UIControlState.Normal); 
      btnCancel.TitleLabel.Font = UIFont.SystemFontOfSize(18); 
      btnCancel.BackgroundColor = UIColor.White; 
      btnCancel.Layer.CornerRadius = cornerRadius; 
      btnCancel.Layer.MasksToBounds = true; 
      btnCancel.TouchUpInside += delegate 
      { 
       Close(); 
      }; 

      backgroundContainer.AddSubview(topContainer); 
      backgroundContainer.AddSubview(btnCancel); 

      Layout(); 
     } 

     public void Layout() 
     { 
      this.Frame = UIScreen.MainScreen.Bounds; 

      nfloat tableMaxHeight = UIScreen.MainScreen.Bounds.Height * maximumProportion - 2 * itemPadding - 2 * itemHeight; 
      nfloat tableHeight = dataList.Count * itemHeight < tableMaxHeight ? dataList.Count * itemHeight : tableMaxHeight; 

      nfloat itemWidth = UIScreen.MainScreen.Bounds.Width - 2 * itemPadding; 

      nfloat backgroundContainerHeight = tableHeight + 2 * itemHeight + itemPadding; 
      backgroundContainer.Frame = new CGRect(0, 0, itemWidth, backgroundContainerHeight); 

      nfloat topContainerHeight = itemHeight + tableHeight; 
      topContainer.Frame = new CGRect(0, 0, itemWidth, topContainerHeight); 

      topContainerTitleView.Frame = new CGRect(0, 0, itemWidth, itemHeight); 
      topContainerTable.Frame = new CGRect(0, itemHeight, itemWidth, tableHeight); 

      btnCancel.Frame = new CGRect(0, topContainerHeight + itemPadding, itemWidth, itemHeight); 

      BackContainerShownFrame = new CGRect(new CGPoint(itemPadding, UIScreen.MainScreen.Bounds.Height - backgroundContainerHeight - itemPadding), backgroundContainer.Bounds.Size); 
      backContainerHiddenFrame = new CGRect(new CGPoint(itemPadding, UIScreen.MainScreen.Bounds.Height + itemPadding), backgroundContainer.Bounds.Size); 
     } 

     public void Show() 
     { 
      UIApplication.SharedApplication.KeyWindow.AddSubview(this); 
      backgroundContainer.Frame = backContainerHiddenFrame; 
      this.AddSubview(backgroundContainer); 
      UIView.Animate(0.3, delegate 
      { 
       this.BackgroundColor = UIColor.FromRGBA(0, 0, 0, 0.5f); 
       backgroundContainer.Frame = BackContainerShownFrame; 
      }); 
     } 

     public void Close() 
     { 
      UIView.Animate(0.3, delegate 
      { 
       backgroundContainer.Frame = backContainerHiddenFrame; 
       this.BackgroundColor = UIColor.Clear; 
      }, delegate 
      { 
       this.RemoveFromSuperview(); 
       if (null != RowClicked && null != selectedNumber) 
        RowClicked(selectedNumber); 
      }); 
     } 
    } 

    class ALActionSheetSource : UITableViewSource 
    { 
     public event OneParameterEventHandler<string> RowClicked; 

     private string cellID = "ALActionSheetCell"; 
     private List<string> dataList; 

     public ALActionSheetSource(List<string> _dataList) 
     { 
      dataList = _dataList; 
     } 

     public override nint RowsInSection(UITableView tableview, nint section) 
     { 
      return dataList.Count; 
     } 

     public override UITableViewCell GetCell(UITableView tableView, Foundation.NSIndexPath indexPath) 
     { 
      UITableViewCell cell = tableView.DequeueReusableCell(cellID); 
      if (null == cell) 
      { 
       cell = new UITableViewCell(UITableViewCellStyle.Default, cellID); 
       cell.TextLabel.TextAlignment = UITextAlignment.Center; 
       //cell.TextLabel.AdjustsFontSizeToFitWidth = true;//Auto resize by content 
       cell.TextLabel.Lines = int.MaxValue;//Multiple lines 
      } 

      cell.TextLabel.Text = dataList[indexPath.Row]; 
      return cell; 
     } 

     public override void RowSelected(UITableView tableView, Foundation.NSIndexPath indexPath) 
     { 
      if (null != RowClicked) 
       RowClicked(dataList[indexPath.Row]); 
     } 
    } 
} 

そして、このようにそれを呼び出す:

public override void ViewDidLoad() 
     { 
      base.ViewDidLoad(); 
      // Perform any additional setup after loading the view, typically from a nib. 

      List<string> testList = new List<string>(); 
      for (int i = 0; i < 10; i++) { 
       testList.Add("Item " + i.ToString()); 
      } 
      testList.Add("I'm a very very very very very very very very long text."); 
      ALActionSheet actionSheet = new ALActionSheet(testList); 
      actionSheet.RowClicked += (data) => { 
       Console.WriteLine("data = "+data); 
      }; 


      UIButton btnTest = new UIButton(UIButtonType.System); 
      btnTest.SetTitle("Test", UIControlState.Normal); 
      btnTest.Frame = new CoreGraphics.CGRect(50, 50, 80, 30); 
      btnTest.TouchUpInside += delegate { 
       actionSheet.Show(); 
      }; 
      this.Add(btnTest); 
     } 

お手数ですがお手伝いします。

+0

あなたはそれを男でした!ありがとう! – iDesireJustice

+0

お手伝いをしてうれしいです。あなたはそれがあなたのために働くと思うなら正解とマークできますか?それから、他人はそれがまた彼らを助けることができることを知ることができる。 –

関連する問題