我有一个带有自定义UITableViewCell的TableView.在每个单元格中,我有多个按钮,当向下滚动向上按下任何按钮时,它会自动调用多次我向下和向上滚动.
我已阅读并研究解决方案,但我还没有找到解决方案.
我知道问题是单元格正在被重用,这就是为什么按钮被多次调用但我找不到防止它的方法.
我通过代码添加了控制台写行语句,而MoveToWindow中的else部分从不调用.这可能是原因吗?
解决方案的研究材料:
我的代码在uitableview中调用了两次btndelete方法
在自定义UITableViewCell中多次调用UIButton click事件
我的代码:
namespace Class.iOS
{
public partial class CustomCell : UITableViewCell
{
public static readonly NSString Key = new NSString ("CustomCell");
public static readonly UINib Nib;
public int Row { get; set; }
public event EventHandler LikeButtonPressed;
private void OnLikeButtonPressed()
{
if (LikeButtonPressed != null)
{
LikeButtonPressed(this, EventArgs.Empty);
}
}
public override void MovedToWindow()
{
if (Window != null)
{
btnAdd.TouchUpInside += HandleLikeButtonPressed;
}
else
{
btnAdd.TouchUpInside -= HandleLikeButtonPressed;
}
}
private void …Run Code Online (Sandbox Code Playgroud) 在我的应用程序上,使用Xamarin Profiler我注意到每当我将VC推送到堆栈并导航回来时,内存分配就不是免费的.如果我再次推送相同的视图,它会增加更多内存.
我创建了一个示例项目来测试,我发现这是同样的事情.
示例项目:
我有两个视图控制器,VC1和VC2.VC1是根视图控制器.
每当我从VC1推送VC2时,就会分配内存,但是当我向后导航时,内存不是空闲的.如果我再次继续推动VC2,它会增加更多内存.在VC2中,我通过设计师添加了3个标签.
在AppDelegate中:
namespace TestSample
{
[Register("AppDelegate")]
public class AppDelegate : UIApplicationDelegate
{
public override UIWindow Window
{
get;
set;
}
public override bool FinishedLaunching(UIApplication application, NSDictionary launchOptions)
{
Window = new UIWindow(UIScreen.MainScreen.Bounds);
var nav = new UINavigationController(new MyViewController());
Window.RootViewController = nav;
Window.MakeKeyAndVisible();
return true;
}
}
}
Run Code Online (Sandbox Code Playgroud)
VC1:
namespace TestSample
{
public partial class MyViewController : UIViewController
{
public MyViewController() : base("MyViewController", null)
{
}
public override void ViewDidLoad()
{
base.ViewDidLoad();
// Perform any additional …Run Code Online (Sandbox Code Playgroud)