小编Joe*_*out的帖子

UIDatePicker错误?点击最小内部后的UIControlEventValueChanged

我遇到了一个奇怪的效果,肯定看起来像iOS7中的一个错误 - 但是在过去,当我以为我发现Apple的API中有一个错误时,它已经证明是我自己的误解.

我有一个带有datePickerMode = UIDatePickerModeCountDownTimer和minuteInterval = 5的UIDatePicker.我将持续时间初始化为1小时,并将其呈现给用户,它显示为具有小时和分钟的双列选择器.(到现在为止还挺好.)

用户正在考虑"20分钟",因此将小时列滚动到0.此时选择器读取0小时0分钟,而iOS7并不酷,因此它会自动将分钟轮滚动到5.我的UIControlEventValueChanged处理程序被调用,countDownDuration读取5分钟.(还好.)

现在,用户抓住分钟轮并将其拖动到20.并且...我的UIControlEventValueChanged处理程序不会被调用.(坏.)

如果我在UI中有其他事件检查此时的日期选择器,我确实看到countDownDuration设置为20.但我无法知道用户在更改时已经更改了它.这是非常可重复的:它始终发生在拾取器拒绝设置为0之后的第一次更改(将自身推进到5分钟).

请注意,这是在iOS7中; 它不会出现在iOS6中(也许是因为选择器有完美的内容设置为0分钟).

所以......我在这里错过了一些东西吗?或者这是iOS7中的真正错误?而在后一种情况下,是否有人知道解决方案比定时检查当前间隔更好?

uidatepicker ios uicontrolevents

27
推荐指数
2
解决办法
4081
查看次数

对于添加到Xamarin/Mono中的NUnit [Lite]项目的文件,intellisense失败

我正在尝试使用Xamarin(在Mac OS X上)在Mono中进行一些跨平台(Mac,iOS,Android)开发.我在"Filament"命名空间内创建了一个"Point"类,现在我正在尝试添加单元测试.

在Mono世界中,似乎有两种单元测试方法:NUnit和NUnitLite.我已经尝试了两种方法(在后一种情况下,遵循本教程),结果相同,这是:

在我的单元测试项目中,我添加了一个指向Point.cs文件的链接(通过右键单击项目,使用"添加...",选择文件,然后选择"添加为链接"选项).在我的单元测试文件(PointTest.cs)中,我添加"using Filament;" 到文件的顶部.但是尽管我现在可以使用Point类,并且它成功编译,但Intellisense似乎完全没有注意到它 - 每次我开始键入"Point"时它会将其扩展为"PointTest",当我顽固地改变它时对于Point,它将它绘制为红色,就像错误一样.

事实上,我的"使用"线也发生了同样的麻烦; 我键入"使用Filament",它将其更改为"使用FilamentTestsiOS"(我的单元测试项目的命名空间).

这让我疯狂......但作为Mono,Xamarin,NUnit和NUnitLite的完整菜鸟,我确信我做的事情很愚蠢.

设置C#/ Mono单元测试的正确方法是什么,以便intellisense和编译器都能识别我正在编写测试的类?

intellisense code-completion xamarin.ios xamarin-studio

6
推荐指数
0
解决办法
392
查看次数

为什么我的UITableViewCell没有以任何风格显示detailTextLabel?

这个让我把头发拉出来.我只是想用UITableViewCellStyleSubtitle样式创建一个带有文本和细节的表.但细节并未出现.通常这是因为有人忘记用正确的样式初始化单元格,但这不是在这种情况下发生的事情.我已经尝试了所有四种单元格样式,并且细节没有出现在任何单元格中,尽管当我使用UITableViewCellStyleValue2时文本标签确实向右移动.

我以前多次成功创建了表格.在这种情况下,我能想到的唯一重要区别是我没有使用UITableViewController.相反,我像任何其他视图一样嵌入UITableView,并连接我自己的数据源和委托.

我已经把关键方法归结为:

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
    // Get the UITableViewCell (out of the recycling pool, or de novo)
    NSString *reuseID = @"CELL";
    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:reuseID];
    if (not cell) {
        cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleValue2 reuseIdentifier:reuseID] autorelease];
    }

    cell.textLabel.text = @"Foo";
    cell.detailTextLabel.text = @"Bar";
    cell.accessoryType = UITableViewCellAccessoryDisclosureIndicator;
    cell.detailTextLabel.frame = CGRectMake(10, 20, 200,22);        // required
    cell.detailTextLabel.font = [UIFont boldSystemFontOfSize:12];   // also required
    //[cell setNeedsLayout];  (makes no difference)
    return cell;
}
Run Code Online (Sandbox Code Playgroud)

只有当我包含上面"必需"行的两个(并使用除Default之外的任何单元格样式)时,我才能看到详细文本,即使我这样做,文本标签的位置也完全重叠细节标签的位置.

因此,似乎初始化程序正在创建detailTextLabel UILabel,但将其字体大小设置为零,并将其框架设置为空或屏幕外的内容.(我已经尝试在调试器中检查这些,但它不是很有用 - 字体大小为零,框架为空,表示textLabel和detailTextLabel,但textLabel总是显示正常.)

显然,如果必须,我可以通过手动调整标签大小和字体来解决它.但是,在这种情况下,我必须这样做,这通常只是设置样式,文本和布局是自动的,这让我非常不安.我搜索了谷歌和堆栈溢出,但找不到任何类似问题的引用.有没有人知道这里发生了什么? …

uitableview ios detailtextlabel

6
推荐指数
3
解决办法
1万
查看次数

如何在C#中做Sentry模式?

在C++中,我习惯使用sentry模式来确保在块或函数退出时正确释放所获取的资源(例如,参见此处).例如,我使用它来获取图形状态,然后我可以做任何我想要的状态,当sentry对象(引用)超出范围时它会被放回去.

现在我正在使用C#,同样的技巧不起作用,因为析构函数不会被调用,直到谁知道 - 以后.

是否有一些OTHER方法可以保证在释放对象的最后一个引用时触发?或者我只需要记住在从我将使用哨兵的任何方法返回之前调用一些Restore()或Apply()或DoYourThing()方法?

c# c++ design-patterns

5
推荐指数
2
解决办法
522
查看次数

如何在Xamarin Mac中设置NSTextView的文本?

好的,从"我从没想过这将成为困难的部门"部门:如何在Xamarin Mac中设置NSTextField的文本?

  NSTextView view = new NSTextView(new RectangleF(0, 500, 200, 40));
  view.StringValue = "Foo";
Run Code Online (Sandbox Code Playgroud)

不编译(没有方法"StringValue").SetStringValue("Foo")也没有.似乎也没有任何SetText方法.有一个InsertText方法,但它没有采用C#字符串; 它想要一个NSObject(这让我觉得它并不是真正用于直接使用).

请注意,如果我使用NSTextField而不是NSTextView,我可以很好地分配给StringValue.但是使用NSTextField,相同的代码失败了.

我在iOS上的ObjC编程方面很有经验,但对Mac Cocoa和Xamarin Mac来说几乎都是一个菜鸟.所以我确定我错过了一些明显的答案,但我的谷歌搜索没有找到答案(而且Xamarin论坛今天已经失效).任何帮助将不胜感激.

macos nstextview xamarin

4
推荐指数
1
解决办法
1737
查看次数

如何有效地确定 3D 空间中多边形的法线?

我有一堆共面点在 3D 空间中定义了一个多边形。这些总是以相同的方式缠绕(例如顺时针)。我需要确定包含该多边形的平面的有符号法线,即,知道该多边形的“向上”方向。

起初这似乎很容易:取两条边(顶点差)并计算叉积。但是如果边缘恰好是共线的(你得到一个零幅度的叉积),那就失败了。

然后我尝试遍历顶点列表,直到找到与第一条边成相当大角度的第二条边。这在凸多边形上可靠地工作,但如果我最终得到的两条边没有定义多边形内部的三角形,它可能会在非凸多边形上失败(指向相反的方向)。

我知道如果我先对多边形进行三角剖分,那么我可以轻松可靠地检查任何三角形的面……但问题是我的三角剖分库需要知道平面法线。所以,鸡蛋必须先于鸡。

如何在非凸多边形中选取两条边(或三个顶点)来可靠地定义多边形面向的方向?

algorithm polygon computational-geometry geometry-surface

4
推荐指数
1
解决办法
3030
查看次数

如何验证服务器上的 PayPal Express Checkout 详细信息?

我现在正在尝试使用此处描述的客户端 REST 集成来加快使用 PayPal Express Checkout(即 checkout.js)的速度。我看到当支付完成时,我的 onAuthorize 函数被一个“支付”对象调用。

我找不到有关此对象的任何文档,但对其进行了一些探索,揭示了以下属性(至少在今天):

  • 支付令牌
  • 付款人ID
  • 付款ID
  • 意图
  • 返回网址

现在我需要将用户重定向到我网站上的下一步,在那里我显示确认他们已付款等的收据。我想我将上述数据发送到服务器,但由于该步骤很容易被恶意软件欺骗用户,我需要在服务器端的 PHP 代码中验证这些详细信息。

我怎么做?

php paypal

4
推荐指数
1
解决办法
1985
查看次数

如何克隆 RectangleF

如何RectangleF在 C# 中轻松克隆(复制)a?

显然有一些不优雅的方法可以做到这一点,例如new RectangleF(r.Location, r.size),但是肯定有一个.Copyor.Clone方法隐藏在某处吗?但这些都不适合我编译,也似乎没有复制构造函数。我怀疑有一些简单的 C# 标准方法可以复制任何结构,但我还没有找到。

如果重要的话,我的真正目标是创建一个返回矩形偏移版本的方法(因为,令人惊讶的是,RectangleF没有这样的内置 - 它只有一个变异器方法)。我对此最好的尝试是:

public static RectangleF Offset(RectangleF r, PointF offset) {
    PointF oldLoc = r.Location;
    return new RectangleF(new PointF(oldLoc.X+offset.X, oldLoc.Y+offset.Y), r.Size);
}
Run Code Online (Sandbox Code Playgroud)

(令人震惊的是缺少加法运算符,这使得它变得更加丑陋PointF,但这是另一个问题。)有没有更简单的方法来做到这一点?

c# geometry system.drawing clone copy

1
推荐指数
1
解决办法
2125
查看次数

C#:尽管使用了为什么需要完全限定名称?

我正在制作一个跨平台的C#绘图库供我自己使用,模仿System.Drawing并使用尽可能多的标准System.Drawing类型(如PointF,RectangleF,Color和Pen).

不幸的是,iOS上没有提供Pen类.因此,在编译iOS时,我在System.Drawing中添加了这个,并且设计为与标准System.Drawing.Pen类尽可能兼容.到现在为止还挺好.

今天我添加了对线帽和连接样式的支持.在标准框架中(但不在iOS上),这些在System.Drawing.Drawing2D命名空间中定义.所以,我再次在仅在iOS上编译的代码中添加它们:

namespace System {
    namespace Drawing {
        namespace Drawing2D {
            public enum LineCap {
                Flat,
                Round,
                Square   // (etc.)
            }
        }
    public class Pen {
        public Color Color;
        public float Width;
        public Drawing2D.LineCap StartCap;
        public Drawing2D.LineCap EndCap;
        // (etc.)
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

现在我们得到了奇怪的一点.在我的主程序中,我试图使用所有这些,我有"使用System.Drawing;" 在文件的顶部.我发现,即使在iOS上,我现在也可以直接使用Pen:

Pen p = new Pen(Color.Yellow, 6);
Run Code Online (Sandbox Code Playgroud)

但是,如果我尝试直接使用Drawing2D.LineCap,我会收到一个CS0103错误,"当前上下文中不存在名称'Drawing2D'."

p.StartCap = Drawing2D.LineCap.Round;   // <-- ERROR
Run Code Online (Sandbox Code Playgroud)

为了使它工作,我必须完全限定名称,如下所示:

p.StartCap = System.Drawing.Drawing2D.LineCap.Round;   // <-- OK (but sad)
Run Code Online (Sandbox Code Playgroud)

所以,我想明白为什么会这样.我知道当有两个版本的东西时,可能需要一个完全限定的名称,因此编译器无法解决你的意思.但在这种情况下我无法看到碰撞.据我所知,MonoTouch根本没有System.Drawing2D名称空间; 我给了它一个,那么问题是什么?

c# namespaces using ios xamarin

0
推荐指数
1
解决办法
353
查看次数