1

いくつかの UITextView コントロールを含む tableView があります。ユーザーがこれらのいずれかをタップすると、内部のテキストが選択され、キーボード入力によって元のコンテンツがすぐに置き換えられるようにする必要があります。

このコードを使用して選択された UITextView 内のテキストを取得できません:

txtQuantity.SelectAll (new NSObject(NSObjectFlag.Empty));

このコードは、テキストが実際に選択されていない状態で、「選択 | すべて選択」メニューのみを表示するためです。

誰かがこれを機能させましたか?

編集: 以下のコードは、txtQuantity コントロール内のテキストを選択しますが、UIAlert が最初に表示される場合のみです! どうしてこれなの?

public override void ViewDidLoad ()
        {
            base.ViewDidLoad ();

            txtQuantity.TouchDown += txtQuantityHandleTouchDown;

            txtQuantity.EditingDidBegin += delegate {

                txtQuantity.ExclusiveTouch=true;
                UIAlertView uv = new UIAlertView("","OK",null,"OK",null);
                uv.Show ();
            };

        }

        void txtQuantityHandleTouchDown (object sender, EventArgs e)
        {
            txtQuantity.SelectAll (this);
            txtQuantity.Selected = true;

        }

txtQuality.EditingBegin デリゲート内のすべてのコードがコメント アウトされている場合、HandleTouchDown イベントは発生しません。

4

1 に答える 1

1

これがあなたの目的であるかどうかはわかりませんが、簡単なサンプルをまとめました。

私が抱えていた問題は、EditingDidBegin で SelectAll を呼び出すことです。選択を機能させるには、BeginInvokeOnMainThread を呼び出す必要がありました。メイン スレッドでイベントが発生しないことが問題なのか、それとも単にメイン スレッドで非同期呼び出しを行う必要があるのか​​はわかりません。

using System;
using System.Collections.Generic;
using System.Linq;

using MonoTouch.Foundation;
using MonoTouch.UIKit;

namespace SelectText
{
    [Register ("AppDelegate")]
    public partial class AppDelegate : UIApplicationDelegate
    {
        // class-level declarations
        UIWindow window;

        public override bool FinishedLaunching (UIApplication app, NSDictionary options)
        {
            // create a new window instance based on the screen size
            window = new UIWindow (UIScreen.MainScreen.Bounds);

            window.RootViewController = new MyTableViewController ();

            // make the window visible
            window.MakeKeyAndVisible ();

            return true;
        }
    }

    public class MyTableViewController : UITableViewController
    {
        public override void LoadView ()
        {
            base.LoadView ();
            this.TableView.DataSource = new TableViewDataSource ();
        }
        private class TableViewDataSource : UITableViewDataSource
        {
            private class EditCell : UITableViewCell
            {
                UITextField _field;

                public EditCell () : base (UITableViewCellStyle.Default, "mycell")
                {
                    _field = new UITextField (this.Bounds);
                    _field.AutoresizingMask = UIViewAutoresizing.All;
                    _field.BackgroundColor = UIColor.Clear;
                    _field.ShouldReturn = delegate {
                        _field.ResignFirstResponder ();

                        return true;
                    };

                    _field.EditingDidBegin += delegate {
                        this.BeginInvokeOnMainThread ( delegate {
                            _field.SelectAll (this);
                        });
                    };

                    _field.Text = "Some Text";
                    this.Add (_field);
                }

                public override void LayoutSubviews ()
                {
                    base.LayoutSubviews ();
                    _field.Frame = this.Bounds;
                }


            }

            #region implemented abstract members of UITableViewDataSource           
            public override int RowsInSection (UITableView tableView, int section)
            {
                return 2;
            }           

            public override UITableViewCell GetCell (UITableView tableView, NSIndexPath indexPath)
            {
                UITableViewCell cell = tableView.DequeueReusableCell ("mycell");

                if (cell == null)
                {
                    cell = new EditCell ();
                }

                cell.SelectionStyle = UITableViewCellSelectionStyle.None;

                return cell;
            }           
            #endregion
        }
    }
}
于 2012-11-19T21:49:32.237 に答える