0

DetailDisclosureButton の代わりにカスタム セル アクセサリを使用すると、AccessoryButtonTapped イベントを使用できなくなります。選択された行とセクションを数えますか?

image = UIImage.FromFile ("Images/checkmark.png");
    lockButton = new UIButton(UIButtonType.Custom);
    frame = new RectangleF(0f, 0f, 25f, 25f);


    lockButton.Frame = frame;
    lockButton.SetBackgroundImage(image, UIControlState.Normal);
    lockButton.TouchUpInside += (sender, e) => 
    {
        try{
            int i =0;
            foreach(UIView sv in cell.Subviews)
            {
                if(cell.Subviews[i] is UITableView)
                    ;
            }
        }
        catch
        {

        }
    };


    if (sourceType == TableSoureType.Collections && collGroup [indexPath.Section].LocationEntity [indexPath.Row].CollectionStatus.ToLower () != "open") {
        cell.TextLabel.TextColor = UIColor.Gray;
        cell.AccessoryView = lockButton;
    } 
    else if(sourceType == TableSoureType.Collections && collGroup [indexPath.Section].LocationEntity [indexPath.Row].CollectedToday) {
        cell.TextLabel.TextColor = UIColor.Black; 
        cell.AccessoryView = lockButton;
    }
    else
    {
        cell.TextLabel.TextColor = UIColor.Black; 
        cell.Accessory = UITableViewCellAccessory.DetailDisclosureButton;
        }

これは新しい投稿の原因かもしれませんが、ボタンをクリックするとシミュレーターでアプリケーションが終了するという問題もあります-ガベージコレクションの問題である可能性があることを理解しているので、ボタン、画像、およびフレームの宣言を移動しましたクラスレベルまで無駄に。

だから私は2つの問題があります:

1 - TouchUpInside イベントが正常に動作するようになったら、そのイベントが発生したときにどのセルが選択されていたかをどのように把握すればよいですか?

2 - シミュレーターでクラッシュを引き起こさずに TouchUpInside イベントを発生させる方法 - ガベージ コレクションの問題であるという私の理解から - デバイス自体でクラッシュが発生しないことも重要だと思います...しかし、内部のコードも機能しません

4

1 に答える 1

1

私が正しく理解していれば、セル内に UIButton を配置していて、UITableView の RowSelected イベントの代わりにそれを使用したいですか?

メモリの問題を解決するには、UIButtons をセルに追加する前にリストに追加します。ボタンに Tag プロパティを設定して、ボタンを追跡できます。

UITableView が存在する間、どこかに持続します。

List<UIButton> buttons = new List<UIButton> ();

UITableView を作成した関数で

UIButton b = new UIButton (new RectangleF(140, 10, 385, 40));
b.Tag = buttons.Count;
buttons.Add (b);
UIButton b2 = new UIButton (new RectangleF(140, 10, 385, 40));
b2.Tag = buttons.Count;
buttons.Add (b2);

ボタンをクリックしてセルを取得するには、次のようにします。

NSIndexPath ns = NSIndexPath.FromRowSection (b.Tag, 0);
UITableViewCell tcell = tableView.CellAt (ns);
于 2013-06-04T15:48:43.040 に答える